#cocoa #macos #core-data #nsmanagedobject
#какао #macos #ядро-данные #nsmanagedobject
Вопрос:
Я работаю над приложением на основе документов.
При открытии сохраненного файла я загружаю NSManagedObjectContext в контроллер представления. Этот контроллер представления должен отслеживать изменения в свойстве «глубина» для всех объектов определенного типа. Когда контроллер представления получает контекст, он получает все эти объекты, добавляет себя в качестве наблюдателя этого значения для каждого и сохраняет их в массиве для отслеживания.
Всякий раз, когда Core Data отправляет уведомление ContextDidChange, я добавляю созданные объекты в этот массив после их просмотра. Для удаленных объектов я удаляю контроллер представления в качестве наблюдателя и удаляю их из этого массива.
Это отлично работает, пока я не закрою документ и не открою его снова. Когда это происходит, все объекты добавляются в этот массив. Наблюдение работает нормально. Однако, как только появляется первое «NSManagedObjectContextObjectsDidChangeNotification», все мои NSManagedObjects каким-то образом больше не находятся в созданном мной массиве. При удалении я получаю сбой, сообщающий мне, что я не могу удалить observer, который не является observer.
Это очень странно.
Почему эти NSManagedObjects внезапно исчезли? Я не освобождаю массив и вообще не занимаюсь с ним какими-либо забавными делами.
Ответ №1:
Когда вы закрываете документ и снова открываете его, вы получаете новый объект view controller.
Однако, похоже, что исходный контроллер представления все еще существует и все еще наблюдает:
NSManagedObjectContextObjectsDidChangeNotification.
Убедитесь, что при закрытии вашего документа контроллер представления удаляет себя как наблюдателя уведомлений.