我正在处理一些使用 anNSOperation
来导入数据的代码。我希望用户能够撤消NSManagedObject
在导入操作期间创建的实例。
据我所知,不可能将NSManagedObjectContext
-undoManager
用于在主线程之外执行的任何操作。从Core Data Programming Guide部分的Use Thread Confinement to Support Concurrency,我们有这两个条件:
- 只有 objectID 应该在托管对象上下文之间传递(在单独的线程上)
- 托管对象必须先保存在上下文中,然后才能使用 objectID。
这是有道理的,因为托管对象需要在共享之前从私有存储 ( NSManagedObjectContext
) 移动到公共存储 ( )。NSPersistentStore
不幸的是,该-save:
消息还会导致撤消堆栈中的任何托管对象被删除。从 同一指南的使用核心数据的内存管理部分:
具有未决更改(插入、删除或更新)的托管对象由其上下文保留,直到其上下文被发送 save:、reset、rollback 或 dealloc 消息,或适当数量的撤消来撤消更改。
我已经尝试了几件事来解决这个限制,一切最终都会导致主线程上发生的大部分工作(以及旋转的沙滩球)。非常感激。
--
已提交增强雷达:rdar://problem/8977725