Как правильно получить уведомление о восстановлении объекта модели базовых данных после удаления?

У меня есть элегантная система, настроенная с использованием Core Data, в которой каждый раз, когда свойство модельного объекта изменяется, оно автоматически отражается в ассоциированном представлении с использованием наблюдения значения ключа, но я столкнулся с проблемой при использовании отмены.

Проблема возникает, когда я удалил объект модели. Связанное представление уничтожается вместе со всеми наблюдениями значения ключа, когда это происходит. Пользователь внезапно решает, что удаление было плохой идеей, и выдает команду отмены, восстанавливая объект модели. В этот момент наблюдение значения ключа было уничтожено, и я не могу найти хороший способ выяснить, какой модельный объект был возвращен из мертвых, и снова все настроить.

Текущее решение, о котором я подумал, - это регистрация для NSUndoManagerDidUndoChangeNotification, а затем ручное прохождение по объектам моей модели базовых данных и просмотр того, какие из них не имеют связанного представления. Я полагаю, что должен быть способ просто узнать, какой именно объект был возвращен, и подумал, что этот подход будет излишним.

Я также думал о создании группы отмены, в которой удаленное представление повторно добавляется при повторном появлении объекта модели, но я хотел бы, чтобы мой менеджер отмены был связан с моделью, только если это возможно.

Я думаю, что решение, которое я ищу, состоит в том, чтобы менеджер отмены сказал: "Эй! Любой, кто заинтересован, послушайте! Я только что отменил, и вот объект модели Core Data, который был воскрешен! Делайте с ним что хотите!" а затем я настраиваю вид, как если бы был создан новый объект модели.

Есть идеи или рекомендации?

2 ответа

Решение

Следующий метод NSManagedObject может быть правильной точкой для повторной настройки наблюдений:

- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags

Он отправляется NSManagedObject после операций отмены / возврата

Проблема возникает, когда я удалил объект модели. Связанное представление уничтожается вместе со всеми наблюдениями значения ключа, когда это происходит.

Я не уверен, что вы подразумеваете под этим, но представление не должно быть настолько напрямую связано с моделью, что сам объект представления умирает, когда модель что-то удаляет. Контроллер должен справиться с этим и иметь возможность изменить его.

Похоже, вам нужно зарегистрировать контроллер для одного из уведомлений отменить менеджер. Это, по крайней мере, сообщит вам, когда была выполнена отмена, и тогда вы сможете предпринять соответствующие действия.

Другие вопросы по тегам