2011-12-29 51 views
3

我有一个NSManagedObject与另一个NSManagedObject的多对多关系。CoreDataGeneratedAccessors删除对象似乎并没有删除

在创建NSManagedObject期间,我可以使用生成的访问器的removeNotesObject,并且删除工作正常。我可以创建一个对象添加到父对象,保存对象,删除对象,然后再次保存。当我获取这个父对象时,我创建和删除的对象仍然被删除。

但是,在添加对象然后保存它(但不要删除并保存之后)然后获取它之后,我似乎无法删除先前创建的对象。我正在使用生成的访问器来尝试删除该对象,该对象似乎可以正常工作,但是当我再次获取该对象时,该对象尚未被删除。

(注:添加的对象做的工作,所以它不是与节约问题)

要删除我检索集对象,并选择我要删除的对象的对象。然后我删除的对象

NSSet *notes = summary.notes; 
NSSet *oldNotes = [notes objectsPassingTest:^(id obj,BOOL *stop){ 
    Note *oldNote = (Note *)obj; 
    BOOL sameRow = (oldNote.row == newNote.row); 
    BOOL sameColumn = (oldNote.column == newNote.column); 
    BOOL success = (sameRow && sameColumn); 
    return success;}]; 
[summary removeNotes:oldNotes]; 

我已经尝试使关系相反删除没有删除它们的对象。我也尝试了不同的删除规则(级联和无效),这再次无效。最后,我试图分开移除每个对象,并在从父对象中删除每个对象后再从该上下文中删除,而这又不幸地不起作用。

我认为这个问题必须与它是一个获取对象有关。如果有人能帮助我,我会非常感激,因为我想不出任何其他方式来测试或解决这个问题。

回答

0

上述代码不起作用的原因是==实际上不会比较NSNumber。相反,你需要调用'isEqualTo:'。我想,在它保存之前检查地址,然后才开始工作。更重要的是,它在NSSet中返回一个对象,因此似乎正在工作。在调试过程中,不清楚对象是什么,但显然不是我需要的。

1

你需要做的

NSManagedObjectContext * moc = .......; 
[moc deleteObject:note] 

编辑:生成的访问只需从关系中移除对象中的核心数据,但不会永久删除对象。这很有意义,因为您可能有一个NSManagedObject通过关系与多个其他NSManagedObject关联。

编辑:以上述方式删除将调用删除规则。我建议你仔细检查他们是否正确设置。

+0

感谢您的建议。我在删除对象后尝试使用'deleteObject',但在暂时删除对象后,我不会在删除对象后将其删除。至于删除规则,我目前已将删除规则设置为级联,但不起作用,并且无效也不起作用。 – Theo 2011-12-29 22:11:41

+1

你如何重新提取它?您可能需要保存NSManagedObjectContext。在保存managedObjectContext之前,更改不会持久保存到磁盘。 – lorean 2011-12-29 22:17:43

+0

是的,我想确保它是绝对保存的,因为我已经同时添加了对象和删除的对象,然后保存。当我获取对象时,新对象仍然被添加,但其他对象未被删除。 – Theo 2011-12-29 23:22:48