Менеджер по отмене
Эта статья обеспечивает концептуальное понимание основных свойств и поведение менеджера по отмене. Практические, основанные на коде примеры предоставлены в более поздних статьях.
Обзор
NSUndoManager
стек отмены общего назначения, где клиенты могут зарегистрироваться, обратные вызовы, которые будут вызваны, должны отмена требоваться. Когда Вы выполняете действие, изменяющее значения свойств объекта (например, путем вызова метода доступа набора), можно также зарегистрировать в менеджере по отмене работу, которая может инвертировать действие.
Менеджер по отмене собирает все операции отмены, происходящие в единственном цикле цикла выполнения, так, чтобы выполнение отмены вернулось все изменения, произошедшие во время цикла. Кроме того, при выполнении отмены менеджер по отмене сохраняет операции, вернувшиеся так, чтобы можно было восстановить неDOS.
NSUndoManager
реализован как класс платформы Основы, потому что исполнимые программы кроме приложений могли бы хотеть вернуться изменения в своих состояниях. Например, Вы могли бы иметь интерактивный инструмент командной строки с отменой и восстановить команды; или могли быть Распределенные Реализации объектов, которые могут вернуться операции “по проводу”. Однако пользователи обычно видят отмену и восстановление как функции прикладного уровня. Набор Приложения реализует отмену и восстановление в NSTextView
возразите и упрощает реализовывать его в объектах вдоль цепочки респондента. Для больше на роли Набора Приложения в отмене и восстановлении, посмотрите Используя Отмену в Находящихся в AppKit Приложениях.
Операции отмены и группы
Работа отмены является методом для возвращения изменения в объекте, вместе с параметрами должен был вернуться изменение. Работа указывает:
Объект получить сообщение, если требуют отмену.
Это может быть объектом, изменившимся, или объект, которому принадлежит изменившийся объект.
Сообщение для отправки.
Параметры для передачи с сообщением.
Обычно необходимо передать по крайней мере один параметр — исходное значение.
Поскольку NSUndoManager
также восстановление поддержек, эти операции должны обычно быть обратимыми. Метод это вызывается во время работы отмены, должен самостоятельно зарегистрировать работу отмены, которая будет тогда служить действием восстановления.
Операции отмены обычно собираются в группах отмены, которые представляют целые revertible действия и сохранены на штабеле. Когда менеджер по отмене выполняет отмену или восстановление, она фактически отменяет или восстанавливает всю группу операций. Например, пользователь мог изменить гарнитуру и размер шрифта некоторого текста. Приложение могло бы упаковать обе устанавливающих атрибут операции как группу, поэтому когда пользователь выбирает Undo, и гарнитура и размер шрифта вернулись. Для отмены единственной работы это должно все еще быть упаковано в группе.
Операции восстановления и группы являются просто операциями отмены, сохраненными на отдельном штабеле (описанный ниже).
NSUndoManager
обычно создает группы отмены автоматически во время цикла выполнения. В первый раз, когда просят записать работу отмены в цикле выполнения, это создает новую группу. Затем в конце цикла это закрывает группу. Можно создать дополнительные, вложенные группы отмены в этих группах по умолчанию, использующих beginUndoGrouping
и enableUndoRegistration
методы. Можно также выключить значение по умолчанию, группирующее использование поведения setGroupsByEvent:
.
Стеки отмены и стеки повторного выполнения
Группы отмены сохранены на штабеле с самыми старыми группами в нижней части и новейшем наверху. Стек отмены неограничен по умолчанию, но можно ограничить его максимальным количеством групп, использующих setLevelsOfUndo:
метод. Когда штабель превышает максимум, самые старые группы отмены отбрасываются от нижней части.
Первоначально, оба штабеля пусты. Запись операций отмены добавляет к стеку отмены, но стек повторного выполнения остается пустым, пока не выполняется отмена. Выполнение отмены заставляет возвращающиеся операции в последней группе, которая будет применена к их объектам. Начиная с этих изменений причины операций в состояниях объектов объекты по-видимому регистрируют новые операции в менеджере по отмене, на сей раз в обратном направлении от исходных операций. Так как менеджер по отмене находится в процессе выполнения отмены, это записывает эти операции как операции восстановления на стеке повторного выполнения. Последовательная неDOS добавляет к стеку повторного выполнения. Последующие операции восстановления вытягивают операции от стека повторного выполнения, применяют их к объектам и пододвигают их обратно на стек отмены.
Содержание стека повторного выполнения в последний раз пока отмена и восстановление выполняется последовательно. Однако, потому что применение нового изменения в объекте лишает законной силы предыдущие изменения, как только новая работа отмены регистрируется, любой существующий стек повторного выполнения очищен. Это препятствует тому, чтобы восстановление возвратило объекты несоответствующему предшествующему состоянию. Можно проверить на возможность отменить и восстановить с canUndo
и canRedo
методы.