我有一个NSArrayController链接到核心数据对象,设置为自动重新排列内容并由谓词过滤。一切都很好,直到我试图取消关系并分配另一个关系。在这一点上,我的应用程序崩溃,我收到以下错误:KVO问题“无法删除观察者”
Cannot remove an observer for the key path "career.type" from Object, most likely because the value for the key "career" has changed without an appropriate KVO notification being sent. Check the KVO-compliance of the Person class.
从周围窥探,似乎有我的NSArrayController的设置为自动重新编排内容导致此问题。但我试图解决问题,而不必手动重新排列NSArrayController。这里是一个的触发错误的伪代码:
object.career = nil;
object.field = (Field *)item;
这里是我的NSArrayController的使用谓词:
(career != NIL && career == %@) || (field != NIL && field == %@)
凡%@对于这两种情况下是一个CoreData对象。
基本上,它看起来好像NSArrayController有一个为object.career.type设置的观察者,并且当该观察者被自动删除时取消关系会导致问题。所以我想知道如果我以错误的方式去解决这个问题?我是否应该抓取该对象的副本,将其从MOC中删除并重新插入,并设置相应的nil和field设置?
如何正确通知观察者该类型已被取消?请注意,这里提到的所有属性和关系使用符合vanilla KVO的getter/setter。