我正在从事的项目的一部分涉及管理产品的存储.
Storage对象包含StorageShelf对象,用于定义架子数量.反过来,StorageShelf包含一些其他对象,例如StorageLocation对象,用于确定可以放在架子上的产品数量.所有这些对象都存在于CoreData中.我还将Storages和StorageShelf存储在CloudKit数据库中以进行同步.
如果我在两台iPad上运行我的应用程序,并在其中一台设备上添加一些带有一些架子的存储器,它会在另一台设备上接收通知并开始处理它收到的更新.
我的应用程序中有一个CloudOperationQueue,其maxConcurrentOperationCount为1,以确保同时只进行一次更新(这是因为我的应用程序的所有对象,以及超出此问题范围的对象都是高度相互依赖的).
不一致,这会导致以下SIGABRT错误消息:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Objects should not be both modified and additional'
具体来说,在我对收到的一个货架对象进行修改后保存上下文时会发生此错误.货架没有一致性.
题
这个错误是什么意思,怎么调试呢?
最佳答案 我最近得到了这个错误,也不一致.问题与添加对象然后在后台线程上保存CoreData上下文(拖放更新的一部分)有关,同时还尝试更新显示主线程上对象列表的视图.
修复是为了使事情同步发生,对我来说,简单的修复是将保存操作移动到主线程,就像(在Swift中):
DispatchQueue.main.async {
// save your context
}