CoreData:"悬挂对无效对象的引用".错误

Pro*_*ody 25 iphone cocoa-touch core-data

我正在开发一个Cocoa-Touch应用程序,它使用CoreData并且有一些由XCode模型编辑器生成的NSPersistentObject子类.

我注意到最近,当保存上下文时,我得到一个错误,其中包含以下部分的用户信息:

(gdb) po ui {
    "Dangling reference to an invalid object." = <null>;
    NSAffectedObjectsErrorKey = <dump #1 of someObject>;
    NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1550.)";
    NSValidationErrorKey = <someKey pointing to someObject #1>;
    NSValidationErrorObject = <dump #2 of someOtherObject which points to the dump #1 object>;
    NSValidationErrorValue = { <list of someMoreObjects> };
}
Run Code Online (Sandbox Code Playgroud)

用户信息字典中还有其他键.

我得到的所有转储都是有效的对象,我已经验证了所有这些.

NSValidationErrorObject是其具有的对象NSSet包含在倾倒类型的对象NSAffectedObjectsErrorKeyNSValidationErrorValue.但所有这些对象都是有效的.

此外,这是随机发生的,有时会发生,有时不会发生,有时倾倒的列表NSValidationErrorValue更长,有时更短.

我不知道为什么会发生这种情况,或者究竟是什么错误.有谁知道发生了什么?什么可能导致这个奇怪的错误?

Tec*_*Zen 26

这种错误通常是因为当一个物体没有必要的互惠关系时经常设置不正确的关系.该对象是"悬空",因为对象图表示它应该处于一种关系中,但它只是在空间中悬挂而未连接到任何其他对象.该对象在内部一致的意义上仍然有效,但它不在图中的有效位置.

  • 可能,但这是解决问题的问题之一.警告可能告诉您问题的根源.对于复杂的数据结构,您应该将警告视为错误,因为警告通常会告诉您如果正确的情况排列可能会失败.检查A和B是否具有相同的C删除规则.在错误转储中哪些对象是哪个,即A类,B类或C类的"someObject"和"someOtherObject"? (2认同)
  • 不知道你是怎么修的吗?我会感兴趣的. (2认同)

小智 18

这个问题有一段时间被问到,但我刚刚遇到它.在我的情况下,在技术上不适当地设置关系.这是由于在不同的上下文中创建了对象,因此请注意不同的线程上只是同一线程上的不同上下文.

因此,如果您正在使用Core Data的线程执行任何操作,请查找线程问题.

  • 我遇到这个问题正是因为混淆了上下文。只需确保仅在属于同一上下文的对象之间建立关系即可。 (2认同)

小智 12

假设你有一个表"食谱"和一个子表"成分".然后,您可以创建从配方到配料的一对多关系,并创建从配料到配方的反向关系(一对一).从配方表中指定"级联"的删除规则是有意义的,因为如果删除配方,则还应删除配方.但是,如果在删除规则中对成分中的一对一关系指定"无操作",则在尝试删除成分时将获得悬空引用错误.将一对一关系上的删除规则更改为"nullify",这应该可以解决问题.

  • Thx,你救了我的一天!“不采取行动”规则是我关系中的问题。 (2认同)

p.p*_*pad 5

我知道事情已经很久了,但我一直在核心数据模型上解决这个问题,其中所有关系都设置为Nullify.保持得到这些悬挂引用,直到我找到一个单一setPrimitiveValue而不是setValue当我添加到关系时.小心,关系,你必须确保你做正确的事情,让Core Data为你维护关系!