删除对象的 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 似乎没有被删除的主要内容,如果未能解决你的问题,请参考以下文章

如何删除jQuery对象中元素

从数组中删除重复的对象

qt全局对象删除

一对多删除对象不删除多个实体上的对象

删除数组中指定的某个对象

在父对象中删除时从子对象中删除实体子对象的选项