我的应用程序具有NSOperation
获取和操作托管对象的子类。我的应用程序还定期从数据库中清除行,这可能导致以下竞争条件:
- 后台操作获取一堆对象(从特定于线程的上下文中)。它将遍历这些对象并使用它们的属性做一些事情。
- 在主托管对象上下文中删除了一堆行。
- 后台操作访问从主上下文中删除的对象的属性。这导致一个
'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault'
理想情况下,即使在 main context 中删除了一个对象,也可以对 NSOperation 获取的对象进行操作。我认为实现这一目标的最佳方法是:
- 调用
[request setReturnsObjectsAsFaults:NO]
以确保 Core Data 不会尝试为不再存在于主上下文中的对象执行故障。这里的问题是我可能需要访问对象的关系,(据我了解)仍然会出错。 - 预先遍历托管对象并将我需要的属性复制到单独的非托管对象中。这里的问题是(我认为)我需要同步/锁定这部分,以防在完成复制之前在主上下文中删除了一个对象。
我错过了一些明显的东西吗?看起来我想要完成的事情并没有太不寻常。谢谢你的帮助。