Использование NSUndoManager с prepareWithInvocationTarget, Gestures и Objects
У меня есть своего рода приложение для рисования. Я хочу реализовать Отменить / Повторить. Хотя я сталкиваюсь с трудностями при сохранении оригинальных и новых значений для отмены / повторения.
С помощью жестов мне нужно хранить несколько вещей: трансформировать, центрировать, для диалога свойств, мне нужно хранить еще много, цвет, шрифт, размер шрифта, контур, цвет контура, сам текст и т. Д.
Я создал NSMutableDictionary
Атрибутов, которые пользователь может изменить в Поповере Одного Жеста / Свойства.
Я хотел использовать ответ Роба для NSUndoManager
и Жест вращения, хотя использование его решения работает с CGAffineTransform
который при отправке в качестве параметра для prepareWithInvocationTarget
, это не объект, а просто помещает копию CGAffineTransform
структура в стеке Undo/Redo.
Хотя при использовании prepareWithInvocationTarget
со мной NSMutableDictionary
Словари, которые я передаю (OriginalAttribs, newAttribs), не сохраняются. Я не могу иметь их как локальные iVars, так как они будут меняться при каждом действии на рисованном объекте.
Похоже, я хочу использовать retainArguments
как часть NSInvocation
хотя я не хочу их оставлять. Мне нужна их копия.
Это жесты, которые делают это трудным, так как я не могу продолжать устанавливать OrigianlCenter, OriginalTransform, когда он изменяется, когда жест активен.
ОБНОВЛЕНИЕ Я нашел эту ссылку, и похоже, что я хочу сделать.
Я настроил свой NSUndoManager следующим образом:
//Needed to get access to UndoManager
NSUndoManager * undoManager = [(IoScreenEditorViewController * )UIAppDelegate.ioMainViewController.currentViewController undoManager];
//Need to Store our Center as a NSValue
[undoManager prepareWithInvocationTarget:self];
[undoManager forwardInvocation:anInvocation ];
Затем я получаю ошибку во время выполнения:
-[NSUndoManager undoAttributesWithOriginalAttributes:newAttributes:]: unrecognized selector sent to instance 0xeedcbd0
undoAttributesWithOriginalAttributes:newAttributes:
это селектор, который я настроил для моего объекта NSInvocation. В соответствии с документацией здесь говорится, что она должна передать ее себе (Target), а не отменить сам менеджер?