gpt4 book ai didi

ios - NSFetchedResultsChangeInsert 被调用两次,用于 1 个具有不同对象 ID 的插入

转载 作者:行者123 更新时间:2023-12-01 19:12:17 25 4
gpt4 key购买 nike

我对这个问题失去了理智。

所以我在我的 iOS 应用程序中设置了核心数据:
http://www.cocoanetics.com/2012/07/multi-context-coredata/

然后我通过创建一个临时 MOC(如博客文章中所述)插入一个对象,并在 performBlock: 方法中对所有 3 个上下文执行保存。

在 View Controller 中,我有一个 NSFetchedResultsController它得到通知我确实插入了一个新对象。问题是 NSFetchedResultsChangeInsert被触发两次,每次通过槽的对象都有不同的 objectID (它也是内存中的不同对象实例)。发生的情况是,我在 TableView 中插入了 2 行,但在 SQL 数据库中只有一个新行。当我滚动到表格 View 的底部时,它当然会崩溃。

如果我还对对象执行一些更新,我会得到 NSFetchedResultsChangeUpdate仅调用一次,并使用第二个 NSFetchedResultsChangeInsert 中传递的 objectID称呼。

第一个 ID 如下所示:

<x-coredata:///ReceivedMessage/t605BB9A7-A04E-4B89-B568-65B12E8C259A2>



第二个(以及所有后续的)是这样的:

<x-coredata://02A917C5-850F-4C67-B8E4-1C5790CF3919/ReceivedMessage/p28>



这可能是什么?我错过了一些明显的东西吗?

PS:我还检查了通知是否来自相同的上下文、线程等。确实如此。

最佳答案

您看到的两个 ID 很可能代表一个对象。它们之间的区别只是第一个是临时对象 ID,在创建时分配给对象,第二个是永久对象 ID,在对象存储到托管对象存储时分配给对象(参见 NSManagedObjectID's isTemporaryID) .

要解决此问题,您可以在保存临时 MOC 之前调用 NSManagedObjectContext's obtainPermanentIDsForObjects:error:。这样,在保存传播期间插入的对象将只有一个 ID,并且 NSFetchedResultsControllerDelegate 方法应该只调用一次。

关于ios - NSFetchedResultsChangeInsert 被调用两次,用于 1 个具有不同对象 ID 的插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15696591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com