CoreData在保存后检测已删除的实体

时间:2012-03-09 12:21:14

标签: ios cocoa core-data

如果我删除一个cd实体而不是保存mod

[self.moc deleteObject:(NSManagedObject *)someCDEntity];

[self saveMoc];

指向此cd实体的指针将成为错误

通过尝试访问故障或请求isDeleted,我得到了

'CoreData could not fulfill a fault for

问题是,一旦我保存mod,isDeleted就不再起作用了

那么如何检测实体是否被删除?因为只是要求isFault,并不表示它已被删除...而且我不能使用isDeleted

2 个答案:

答案 0 :(得分:4)

我在这个面向OSX的线程中找到了帮助

How can I tell whether an `NSManagedObject` has been deleted?

- (BOOL) entityWasDeleted:(SomeEntity *)someEntity {

    return ((someEntity == nil) || ([self.moc existingObjectWithID:someEntity.objectID error:NULL] == nil));
}

注意:不要使用下面的代码,因为它可能并不总是有效

if (managedObject.managedObjectContext == nil) {
    // Assume that the managed object has been deleted = might not always work
}

答案 1 :(得分:1)

我在NSManagedObject中使用prepareForDeletion方法。它在删除之前被调用,但是对象仍然有效(并且没有出现故障)。奇迹般有效!