Как правильно получить уведомление о восстановлении объекта модели базовых данных после удаления? - PullRequest
0 голосов
/ 27 августа 2010

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

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

- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags

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

0 голосов
/ 27 августа 2010

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

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

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

...