Исчезающие NSManagedObjects

#cocoa #macos #core-data #nsmanagedobject

#какао #macos #ядро-данные #nsmanagedobject

Вопрос:

Я работаю над приложением на основе документов.

При открытии сохраненного файла я загружаю NSManagedObjectContext в контроллер представления. Этот контроллер представления должен отслеживать изменения в свойстве «глубина» для всех объектов определенного типа. Когда контроллер представления получает контекст, он получает все эти объекты, добавляет себя в качестве наблюдателя этого значения для каждого и сохраняет их в массиве для отслеживания.

Всякий раз, когда Core Data отправляет уведомление ContextDidChange, я добавляю созданные объекты в этот массив после их просмотра. Для удаленных объектов я удаляю контроллер представления в качестве наблюдателя и удаляю их из этого массива.

Это отлично работает, пока я не закрою документ и не открою его снова. Когда это происходит, все объекты добавляются в этот массив. Наблюдение работает нормально. Однако, как только появляется первое «NSManagedObjectContextObjectsDidChangeNotification», все мои NSManagedObjects каким-то образом больше не находятся в созданном мной массиве. При удалении я получаю сбой, сообщающий мне, что я не могу удалить observer, который не является observer.

Это очень странно.

Почему эти NSManagedObjects внезапно исчезли? Я не освобождаю массив и вообще не занимаюсь с ним какими-либо забавными делами.

Ответ №1:

Когда вы закрываете документ и снова открываете его, вы получаете новый объект view controller.
Однако, похоже, что исходный контроллер представления все еще существует и все еще наблюдает:

 NSManagedObjectContextObjectsDidChangeNotification.
  

Убедитесь, что при закрытии вашего документа контроллер представления удаляет себя как наблюдателя уведомлений.