我有一個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。