我遇到了与多线程上下文中使用的 objectID 相关的问题。
我正在使用 objectIDs 向实体传递由后台线程调用的完成块,如下所示:
NSManagedObjectID *entityID = [entity objectID];
[self.queue enqueue:
^{
NSManagedObjectContext *managedObjectContext = // child moc on a bg thread
Entity *entity = (Entity *)[managedObjectContext objectWithID:entityID];
/* Work using the entity */
}];
这曾经工作正常,直到我在网络请求正在进行时开始删除实体(不幸的是,我不能简单地取消它们),这让我遇到了 CoreData 未解决的错误错误。
为了解决这个问题,我开始使用 NSManagedObjectContext 的 existingObjectWithID: 方法。优点是如果对象不存在,它将返回 nil,但我遇到了另一个问题:如果 objectID 是临时的,existingObjectWithID 将返回 nil,尽管对象确实存在。
我尝试在创建实体时使用 gainPermanentIDsForObjects,但这并不理想,因为它意味着对持久性存储进行一些工作,并且随机崩溃。
是否有适当的方法来检查完成异步网络请求后实体是否仍然存在?
提前致谢 !