2012-11-21 65 views
6

除去ManagedObject在本文档,并在广泛的文献所生成工厂方法来删除/移除一个子类被管理对象在CoreData为IOS是删除或在CoreData

(void)removeXXXObject:(NSManagedObject *)value 

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

在我的代码我用这个:

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

其中PersonDatas是一个一对多的关系,数据管理对象从我拍摄的最后数据(lastData导致所有数据的排序阵列) 但是使用前两个删除方法并检查后面的SQL数据库,我们可以发现实际数据存在,只是反向关系为空。 要彻底删除数据(所有属性和对象),我不得不使用:

[selectedPerson.managedObjectContext deleteObject:lastData]; 

问题:哪个是更好的方法是正确的,CoreData离开数据是否完整?

+0

在删除操作后是否保存上下文? –

+0

是的,我保存了上下文,这不是问题。 – BootMaker

回答

7

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

+0

感谢您的快速回答,但我并不完全相信这种行为是正确的。根据您引用的文档,如果您将关系(此处:personDatas)规则从无效切换为级联,则必须删除该对象,如Apple文档中所示:“删除关系目标处的对象。但是,当我尝试它时,带有级联规则的“removeXXXObject”不会删除该对象,因为无效规则执行相同操作会导致令人不安的关系无效。奇怪。 – BootMaker

+2

@BootMaker:“删除规则:级联”表示:如果删除了“Person”对象,则所有相关的“Data”对象也被删除。这并不意味着:如果从相关的“人员”中删除“数据”对象,则将其删除。 - 所以“删除规则”指定:“如果删除此对象会发生什么?” –

+0

@Martin R:你说的是我之前对级联规则的看法,但苹果文档所说的不同,关系的目标对象是数据。你的问:不知道答案,因为这不是问题,但我会尝试它只是为了好玩。 – BootMaker