【问题标题】:CoreDataGeneratedAccessors to remove object don't seem to be deleting删除对象的 CoreDataGeneratedAccessors 似乎没有被删除
【发布时间】: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];

我已经尝试使关系反转以删除没有删除它们的对象。我还尝试了不同的删除规则(级联和无效),但仍然不起作用。最后,我尝试单独删除每个对象,并在从父对象中删除每个对象后从上下文中删除它,但不幸的是,这又不起作用。

我认为问题一定与它是一个获取的对象有关。如果有人可以提供帮助,我将不胜感激,因为我想不出任何其他方法来测试或解决这个问题。

【问题讨论】:

    标签: ios objective-c iphone cocoa-touch core-data


    【解决方案1】:

    你需要做的

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

    edit:生成的核心数据访问器只是从关系中删除对象,但不会永久删除对象。这是有道理的,因为您可能通过关系将一个 NSManagedObject 关联到多个其他 NSManagedObject。

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

    【讨论】:

    • 感谢您的建议。我在删除对象后尝试使用“deleteObject”,但是虽然它确实暂时删除了对象,但在我重新获取它之后对象并没有被删除。至于删除规则,我目前已将删除规则设置为级联,这不起作用,nullify 也不起作用。
    • 你如何重新获取它?您可能需要保存 NSManagedObjectContext。在您保存 managedObjectContext 之前,更改不会持久保存到磁盘。
    • 是的,我想确保它确实在保存,因为我同时添加了对象和删除了对象然后保存了。获取对象时仍会添加新对象,但不会删除其他对象。
    【解决方案2】:

    上述代码不起作用的原因是 == 不会实际比较 NSNumber。相反,您需要调用“isEqualTo:”。我认为在它检查地址之前,因此在我保存它之前就可以工作。更重要的是,它在 NSSet 中返回了一个对象,因此似乎可以正常工作。在调试过程中,不清楚该对象是什么,但显然不是我需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 2011-06-23
      • 2019-03-30
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多