У меня есть View Controller, который управляет видом, который всегда отображается в режиме редактирования. По сути, это представление в виде таблицы, аналогичное представлению контактов в приложении «Контакты» Apple. Модель под моим представлением представлена двухуровневым графом объектов, состоящим из корневого объекта - назовите его R
- с отношением ко-многим к дочернему объекту C
. Теперь R
- это большой объект (он имеет более 20 атрибутов, все редактируемые, но не обязательные). По умолчанию R
имеет n
дочерних элементов (n
является настраиваемым значением), но дочерние объекты можно добавлять и удалять в коллекцию R
из моего представления редактирования, а атрибуты C
могут быть отредактированным также. Обратите внимание, что C
объекты включают атрибуты для метаданных изображения, поэтому могут быть изображения, выбранные и связанные с моделью при редактировании.
Редактирование R
и его дочерних элементов выполняется через основную форму представления таблицы, а также из «вторичных» представлений, к которым я перемещаюсь (назад и вперед) для сбора необходимой информации, в зависимости от случая.
Мой вопрос: как бы вы реализовали «Отменить все правки» в этой ситуации, то есть, как я должен изолировать все свои правки, чтобы легко вернуться к состоянию до редактирования? Используя NSUndoManager
с моим основным NSManagedObjectContext
? Имеете отдельный NSManagedObjectContext
для редактирования? Каковы будут компромиссы для каждого?
Мне плевать на redo
. Я ищу идею / решение, которое позволило бы найти баланс между объемом памяти, используемой при редактировании, и возможностью сохранять данные пользователя, если приложение было прервано во время редактирования.
Спасибо за все ваши идеи.