如何在后台线程上处理已删除的实体?

时间:2013-05-02 09:49:37

标签: ios multithreading core-data nsmanagedobjectid

我遇到了与多线程上下文中使用的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,尽管该对象确实存在。

我在创建实体时尝试使用obtainPermanentIDsForObjects,但这并不理想,因为它暗示了一些与持久性存储有关的工作,并且随机崩溃。

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

提前致谢!

0 个答案:

没有答案