我有一个与另一个NSManagedObject有多对多关系的NSManagedObject。
在创建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 :(得分:1)
你需要做
NSManagedObjectContext * moc = .......;
[moc deleteObject:note]
编辑:核心数据生成的访问器只是从关系中删除对象,但不要永久删除该对象。这是有道理的,因为您可能有一个NSManagedObject通过关系与多个其他NSManagedObjects相关联。
编辑:以上述方式删除将调用删除规则。我建议你仔细检查它们是否设置正确。
答案 1 :(得分:0)
上述代码不起作用的原因是==实际上不会比较NSNumber。相反,你需要调用'isEqualTo:'。我想在我保存它之前检查地址因此工作。更重要的是它在NSSet中返回一个对象似乎正在工作。在调试过程中,不清楚对象是什么,但显然不是我需要的对象。