core-data - 如何判断 `NSManagedObject` 是否已被删除?

标签 core-data ios nsmanagedobject

我有一个 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/

相关文章:

objective-c - 核心数据中没有默认值的可选(数字)属性 - 为什么不鼓励使用它们?

android - 为 PhoneGap 应用程序嵌入 PDF 查看器

ios - CoreData - 更新模型类而不是创建新的

ios - 从核心数据中删除和添加存储

objective-c - iPhone 上预加载数据库?

ios - iOS 上的核心数据——对对象进行特定更改

ios - 获取实体数组中的最高日期。

ios - SwiftUI 在 NavigationLink View 中隐藏 TabView 栏

ios - CGAffineTransform 比例在 iOS10 上移动 View 中心(但在 iOS11 上则不然)

objective-c - 使用 Restkit 手动添加 ManagedObject