Core Data オブジェクトにリンクされた NSArrayController があり、コンテンツの自動再配置に設定され、述語によってフィルター処理されています。関係を無効にして別の関係を割り当てようとするまでは、すべて問題ありません。その時点で、アプリケーションがクラッシュし、次のエラーが表示されます。
オブジェクトからキー パス「career.type」のオブザーバーを削除できません。おそらく、適切な KVO 通知が送信されずにキー「career」の値が変更されたためです。Person クラスの KVO 準拠を確認します。
スヌーピングから、NSArrayController をコンテンツの自動再配置に設定すると、この問題が発生するようです。しかし、NSArrayController を手動で再配置する必要なく、問題を解決しようとしています。エラーを引き起こしている疑似コードは次のとおりです。
object.career = nil;
object.field = (Field *)item;
私の NSArrayController が使用している述語は次のとおりです。
(career != NIL && career == %@) || (field != NIL && field == %@)
両方のインスタンスの %@ は CoreData オブジェクトです。
基本的に、NSArrayController には object.career.type にオブザーバーが設定されているように見えますが、関係を無効にすると、そのオブザーバーが自動的に削除されるときに問題が発生します。だから、私はこれについて間違った方法をとっているのかと思っていますか?オブジェクトのコピーを取得し、MOC から削除して、キャリアを nil に設定し、それに応じてフィールドを設定して再挿入する必要がありますか?
型が無効化されたことをオブザーバーに正しく通知するにはどうすればよいですか? ここで言及されているすべての属性と関係は、通常の KVO 準拠の getter/setter を使用していることに注意してください。