У меня есть NSArrayController, связанный с объектом Базовых данных, установленный на Автоматическое изменение содержимого и отфильтрованный предикатом.Все хорошо, пока я не попытаюсь аннулировать отношения и назначить другое.В этот момент мое приложение аварийно завершает работу, и я получаю следующую ошибку:
Невозможно удалить наблюдателя для ключевого пути «career.type» из Object, вероятнее всего из-за значения для ключа «career»изменилось без отправки соответствующего уведомления 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 и заново установить ее с установленным значением nil и соответствующим образом для поля?
Как правильно уведомить наблюдателя о том, что тип был аннулирован?Обратите внимание, что все атрибуты и отношения, упомянутые здесь, используют ванильные KVO-совместимые методы получения / установки.