删除或删除CoreData中的ManagedObject

Boo*_*ker 6 core-data ios

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

(void)removeXXXObject:(NSManagedObject *)value
Run Code Online (Sandbox Code Playgroud)

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

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

Data *lastData = [[self sortedPersonDatas] objectAtIndex:0];
[selectedPerson removePersonDatasObject:lastData];
Run Code Online (Sandbox Code Playgroud)

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

[selectedPerson.managedObjectContext deleteObject:lastData];
Run Code Online (Sandbox Code Playgroud)

问题:哪个是更好的方法,CoreData是否保持数据完整无误?

MrM*_*age 7

removeXXXObject仅从多对多关系中删除对象,但不从存储中删除该对象.要做到这一点,你必须确实使用deleteObject- 这是理想的行为.deleteObject默认情况下,调用也会将相应的关系设置为nil(请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/ TP40001857-SW1).

  • @BootMaker:"删除规则:级联"表示:如果删除"人员"对象,则还会删除所有相关的"数据"对象.这并不意味着:如果从相关的"Person"中删除"Data"对象,则将其删除. - 因此"删除规则"指定:"如果删除此对象会发生什么?" (2认同)