//Правка: На самом деле, никто не имеет никаких предложений или соображений по этому поводу? Я почему-то задал вопрос? //
У моего iPhone-приложения есть один управляемый объект-объект с умеренно сложной моделью данных. Теперь я добавляю отмену функциональности и не понимаю, как лучше обрабатывать вложенные viewControllers (так как каждый уровень может изменить модель данных).
Apple docs указывают: "Рассмотрите приложение, которое отображает список книг и позволяет вам перейдите к подробному представлению, которое в свою очередь позволяет редактировать отдельные свойства книги (например, ее название, автор и дата авторских прав). Вы можете создать новую книгу из экран списка, перемещайтесь между двумя другие экраны для редактирования его свойств, затем вернитесь к оригиналу список. Это может показаться странным, если отменить операцию в виде списка unid изменение имени авторов, которое было сделал два экрана, а не удаляя всю книгу".
Так какой лучший способ реализовать это? В настоящее время я думаю, что каждый viewController сохраняет свой собственный undoManager, который будет активен всякий раз, когда он на экране. Поэтому я понимаю, что для этого потребуются следующие шаги (для каждого VC):
- Добавить объект:
myUndoManager
- Добавьте метод
undoManager
, возвращающийmyManagedObjectContext.undoManager;
- В
viewDidAppear
:myManagedObjectContext.undoManager = myUndoManager;
//создаем сначала, если nil - В
viewWillDisappear
:myManagedObjectContext.undoManager = nil;
- Предупреждение по памяти:
[self.undoManager removeAllActions ];
- В dealloc:
self.myUndoManager = nil;
- Для каждого изменения модели:
[self.undoManager setActionName:NSLocalizedString(@"XXX",@"")];
- CoreData будет обрабатывать фактические сообщения отменить/повторить.
Кроме того, я должен оставаться первымResponder:
- В
viewDidAppear
: `[self getFirstResponder] ' - Добавить метод
canBecomeFirstResponder
, возвращающий YES - В
viewWillDisappear
: [self resignFirstResponder]; - Снова включить firstResponder при сходе в подвид (например, textFields)
До сих пор это похоже на то, что он работает, даже при загрузке/выгрузке циклов, и красиво автономный, но у меня есть несколько вопросов:
- Во-первых, это лучшая практика для реализации отмены нескольких VC?
- У меня возникнут проблемы с моим дочерним VC, которые не выполняют свои отскоки до моего выполнения моих предыдущих?
- Если это так, отображает ли этот список все, что мне нужно сделать?
- Будет ли запущен ManagedObjectContext с запущенным несколькими UndoManagers?
- Нужно ли мнезывать ProcessPendingActions перед заменой undoManager?