У меня есть приложение на основе документов Core Data, которое поддерживает отмену / возврат через встроенный NSUndoManager, связанный с NSManagedObjectContext. У меня есть несколько настроенных действий, которые выполняют многочисленные задачи в Core Data, оборачивают все эти задачи в группу отмены через beginUndoGrouping
/ endUndoGrouping
и обрабатываются NSUndoManager.
Отмена работает нормально. Я могу выполнить несколько последовательных действий, и каждое из них последовательно отменяет каждое из них, и состояние моего приложения поддерживается правильно. Однако пункт меню «Повторить» никогда не включается. Это означает, что NSUndoManager сообщает меню, что нет элементов для повторения.
Мне интересно, почему NSUndoManager, по-видимому, забывает об элементах после их отмены и не позволяет повторяться?
Одна вещь, которую я должен упомянуть, это то, что я отключаю регистрацию отмены после открытия / создания документа. Когда я выполняю действие, я вызываю enableUndoRegistration
, beginUndoGrouping
, выполняю действие, затем вызываю processPendingChanges
, setActionName:
, endUndoGrouping
и, наконец, disableUndoRegistration
. Это гарантирует, что только определенные действия не могут быть отменены, и любые другие изменения данных, которые я делаю вне этих, остаются незамеченными для NSUndoManager. Это может быть частью проблемы, но если да, то мне интересно, почему это влияет на повтор?
Заранее спасибо.