Как правильно получить уведомление о восстановлении объекта модели базовых данных после удаления?
У меня есть элегантная система, настроенная с использованием Core Data, в которой каждый раз, когда свойство модельного объекта изменяется, оно автоматически отражается в ассоциированном представлении с использованием наблюдения значения ключа, но я столкнулся с проблемой при использовании отмены.
Проблема возникает, когда я удалил объект модели. Связанное представление уничтожается вместе со всеми наблюдениями значения ключа, когда это происходит. Пользователь внезапно решает, что удаление было плохой идеей, и выдает команду отмены, восстанавливая объект модели. В этот момент наблюдение значения ключа было уничтожено, и я не могу найти хороший способ выяснить, какой модельный объект был возвращен из мертвых, и снова все настроить.
Текущее решение, о котором я подумал, - это регистрация для NSUndoManagerDidUndoChangeNotification, а затем ручное прохождение по объектам моей модели базовых данных и просмотр того, какие из них не имеют связанного представления. Я полагаю, что должен быть способ просто узнать, какой именно объект был возвращен, и подумал, что этот подход будет излишним.
Я также думал о создании группы отмены, в которой удаленное представление повторно добавляется при повторном появлении объекта модели, но я хотел бы, чтобы мой менеджер отмены был связан с моделью, только если это возможно.
Я думаю, что решение, которое я ищу, состоит в том, чтобы менеджер отмены сказал: "Эй! Любой, кто заинтересован, послушайте! Я только что отменил, и вот объект модели Core Data, который был воскрешен! Делайте с ним что хотите!" а затем я настраиваю вид, как если бы был создан новый объект модели.
Есть идеи или рекомендации?
2 ответа
Следующий метод NSManagedObject может быть правильной точкой для повторной настройки наблюдений:
- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags
Он отправляется NSManagedObject после операций отмены / возврата
Проблема возникает, когда я удалил объект модели. Связанное представление уничтожается вместе со всеми наблюдениями значения ключа, когда это происходит.
Я не уверен, что вы подразумеваете под этим, но представление не должно быть настолько напрямую связано с моделью, что сам объект представления умирает, когда модель что-то удаляет. Контроллер должен справиться с этим и иметь возможность изменить его.
Похоже, вам нужно зарегистрировать контроллер для одного из уведомлений отменить менеджер. Это, по крайней мере, сообщит вам, когда была выполнена отмена, и тогда вы сможете предпринять соответствующие действия.