6

在文档和广泛的文献中,在 CoreData for IOS 中删除/删除子类托管对象的生成工厂方法是

(void)removeXXXObject:(NSManagedObject *)value

其中XXX是对应关系或者我们可以简单地使用removeObject。

在我的代码中,我使用了这个:

Data *lastData = [[self sortedPersonDatas] objectAtIndex:0];
[selectedPerson removePersonDatasObject:lastData];

其中 PersonDatas 是与数据托管对象的一对多关系,来自我获取最后一个数据(lastData 来自所有数据的排序数组)但是使用前两个删除方法并检查后面的 SQL 数据库,我们可以发现实际数据存在只是反向关系为空。要完全删除数据(所有属性和对象),我必须使用:

[selectedPerson.managedObjectContext deleteObject:lastData];

问题:哪种方法更好,CoreData 保持数据完整是否正确?

4

1 回答 1

7

removeXXXObject仅从一对多关系中删除一个对象,但不会从存储中删除该对象。为此,您必须确实使用deleteObject- 这是所需的行为。默认情况下,调用deleteObject还会将对应关系设置为 nil(参见https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/ TP40001857-SW1)。

于 2012-11-21T14:10:23.180 回答