我有一个 NSManagedObject
已被删除,包含该托管对象的上下文已被保存。我知道 isDeleted
返回 YES
如果 Core Data 将在下一次保存操作期间要求持久存储删除对象。但是,由于保存已经发生,isDeleted
返回 NO
。
判断 NSManagedObject
是否在 其包含上下文已保存后被删除的好方法是什么?
(如果您想知道为什么引用已删除托管对象的对象不知道删除,这是因为删除和上下文保存是由后台线程启动的,该线程使用 performSelectorOnMainThread:withObject:waitUntilDone:
.)
最佳答案
检查托管对象的上下文似乎可行:
if (managedObject.managedObjectContext == nil) {
// Assume that the managed object has been deleted.
}
来自 Apple 关于 managedObjectContext
的文档 ...
This method may return nil if the receiver has been deleted from its context.
If the receiver is a fault, calling this method does not cause it to fire.
这两个似乎都是好东西。
更新:如果您正在尝试测试专门使用 objectWithID:
检索的托管对象是否已被删除,请查看 Dave Gallagher's answer .他指出,如果您使用已删除对象的 ID 调用 objectWithID:
,则返回的对象将是一个错误,不有其 managedObjectContext
设置为零。因此,您不能简单地检查其 managedObjectContext
来测试它是否已被删除。如果可以,请使用 existingObjectWithID:error:
。如果不是,例如,您的目标是 Mac OS 10.5 或 iOS 2.0,则您需要执行其他操作来测试删除。参见 his answer了解详情。
关于core-data - 如何判断 `NSManagedObject` 是否已被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4340445/