У меня есть NSArrayController, связанный с объектом Core Data, для которого установлено автоматическое переупорядочение содержимого и фильтруется предикатом. Все хорошо, пока я не попытаюсь аннулировать отношения и назначить другие. В этот момент мое приложение вылетает, и я получаю следующую ошибку:
Невозможно удалить наблюдателя для ключевого пути "карьера.тип" из объекта, скорее всего, потому что значение ключа "карьера" изменилось без отправки соответствующего уведомления KVO. Проверьте KVO-соответствие класса Person.
Если присмотреться, похоже, что установка моего NSArrayController на автоматическое переупорядочение содержимого вызывает эту проблему. Но я пытаюсь решить проблему, не прибегая к ручной перестановке NSArrayController. Вот псевдокод, вызывающий ошибку:
object.career = nil;
object.field = (Field *)item;
Вот предикат, который использует мой NSArrayController:
(career != NIL && career == %@) || (field != NIL && field == %@)
Где% @ для обоих экземпляров - это объект CoreData.
По сути, это выглядит так, как будто у NSArrayController есть наблюдатель, установленный для object.career.type, и обнуление отношения вызывает проблему, когда этот наблюдатель автоматически удаляется. Так что мне интересно, не так ли я поступаю? Должен ли я получить копию объекта, удалить ее из MOC и повторно вставить ее с параметром карьеры, равным нулю, и соответствующим установленным полем?
Как правильно уведомить наблюдателя о том, что тип был аннулирован? Обратите внимание, что все атрибуты и отношения, упомянутые здесь, используют ванильные KVO-совместимые геттеры / сеттеры.