删除对象的 CoreDataGeneratedAccessors 似乎没有被删除
Posted
技术标签:
【中文标题】删除对象的 CoreDataGeneratedAccessors 似乎没有被删除【英文标题】:CoreDataGeneratedAccessors to remove object don't seem to be deleting 【发布时间】:2011-12-29 11:42:56 【问题描述】:我有一个与另一个 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];
我已经尝试使关系反转以删除没有删除它们的对象。我还尝试了不同的删除规则(级联和无效),但仍然不起作用。最后,我尝试单独删除每个对象,并在从父对象中删除每个对象后从上下文中删除它,但不幸的是,这又不起作用。
我认为问题一定与它是一个获取的对象有关。如果有人可以提供帮助,我将不胜感激,因为我想不出任何其他方法来测试或解决这个问题。
【问题讨论】:
【参考方案1】:你需要做的
NSManagedObjectContext * moc = .......;
[moc deleteObject:note]
edit:生成的核心数据访问器只是从关系中删除对象,但不会永久删除对象。这是有道理的,因为您可能通过关系将一个 NSManagedObject 关联到多个其他 NSManagedObject。
edit:以上述方式删除将调用删除规则。我建议您仔细检查它们是否设置正确。
【讨论】:
感谢您的建议。我在删除对象后尝试使用“deleteObject”,但是虽然它确实暂时删除了对象,但在我重新获取它之后对象并没有被删除。至于删除规则,我目前已将删除规则设置为级联,这不起作用,nullify 也不起作用。 你如何重新获取它?您可能需要保存 NSManagedObjectContext。在您保存 managedObjectContext 之前,更改不会持久保存到磁盘。 是的,我想确保它确实在保存,因为我同时添加了对象和删除了对象然后保存了。获取对象时仍会添加新对象,但不会删除其他对象。【参考方案2】:上述代码不起作用的原因是 == 不会实际比较 NSNumber。相反,您需要调用“isEqualTo:”。我认为在它检查地址之前,因此在我保存它之前就可以工作。更重要的是,它在 NSSet 中返回了一个对象,因此似乎可以正常工作。在调试过程中,不清楚该对象是什么,但显然不是我需要的。
【讨论】:
以上是关于删除对象的 CoreDataGeneratedAccessors 似乎没有被删除的主要内容,如果未能解决你的问题,请参考以下文章