我有一个 NSArrayController 链接到核心数据对象,设置为自动重新排列内容并由谓词过滤。一切都很好,直到我试图取消一段关系并分配另一个。那时,我的应用程序崩溃并且我收到以下错误:
无法从 Object 中删除键路径“career.type”的观察者,很可能是因为键“career”的值已更改而未发送适当的 KVO 通知。检查 Person 类的 KVO 兼容性。
通过窥探,似乎将我的 NSArrayController 设置为 Auto Rearrange Content 会导致此问题。但我正在尝试解决问题,而不必求助于手动重新排列 NSArrayController。这是触发错误的伪代码:
object.career = nil;
object.field = (Field *)item;
这是我的 NSArrayController 使用的谓词:
(career != NIL && career == %@) || (field != NIL && field == %@)
其中两个实例的 %@ 是一个 CoreData 对象。
基本上,看起来 NSArrayController 为 object.career.type 设置了一个观察者,并且当该观察者被自动删除时,使关系无效会导致问题。所以我想知道我是不是走错了路?我是否应该获取对象的副本,将其从 MOC 中删除并重新插入,并将职业设置为 nil 并相应地设置字段?
如何正确通知观察者类型已被取消?请注意,这里提到的所有属性和关系都使用 vanilla KVO 兼容的 getter/setter。