1

我遇到了与多线程上下文中使用的 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,但这并不理想,因为它意味着对持久性存储进行一些工作,并且随机崩溃。

是否有适当的方法来检查完成异步网络请求后实体是否仍然存在?

提前致谢 !

4

0 回答 0