我对这个问题失去了理智。
所以我在我的 iOS 应用程序中设置了核心数据:http: //www.cocoanetics.com/2012/07/multi-context-coredata/
然后我通过创建一个临时 MOC(如博客文章中所述)插入一个对象,并在 performBlock: 方法中对所有 3 个上下文执行保存。
在视图控制器中,我有一个NSFetchedResultsController
,它会收到通知,我确实插入了一个新对象。问题是NSFetchedResultsChangeInsert
被触发了两次,每次通过的对象都有不同的objectID
(它也是内存中的不同对象实例)。发生的情况是,我在表视图中插入了 2 行,但在 SQL 数据库中只有一个新行。当我滚动到表格视图的底部时,它当然会崩溃。
如果我还对对象执行一些更新,我NSFetchedResultsChangeUpdate
只会被调用一次,并且使用第二次NSFetchedResultsChangeInsert
调用中传递的 objectID。
第一个 ID 如下所示:
<x-coredata:///ReceivedMessage/t605BB9A7-A04E-4B89-B568-65B12E8C259A2>
第二个(以及所有后续的)是这样的:
<x-coredata://02A917C5-850F-4C67-B8E4-1C5790CF3919/ReceivedMessage/p28>
这可能是什么?我错过了一些明显的东西吗?
PS:我还检查了通知是否来自相同的上下文、线程等。确实如此。