Использование NSUndoManager с prepareWithInvocationTarget, Gestures и Objects - PullRequest
0 голосов
/ 20 марта 2012

У меня есть приложение для рисования. Я хочу реализовать Отменить / Повторить. Хотя я сталкиваюсь с трудностями при сохранении оригинальных и новых значений для отмены / повторения.

С помощью жестов мне нужно хранить несколько вещей: преобразование, центр, для диалога свойств, мне нужно хранить еще много, цвет, шрифт, размер шрифта, контур, цвет контура, сам текст и т. Д.

Я создал NSMutableDictionary Атрибутов, которые пользователь может изменить в Поповере Одного Жеста / Свойства.

Я хотел использовать Ответ Роба для NSUndoManager и Жест вращения , хотя использование его решения работает с CGAffineTransform, который при отправке в качестве параметра для prepareWithInvocationTarget не является объектом и просто помещает копию структуры CGAffineTransform в стек Undo / Redo.

Хотя при использовании prepareWithInvocationTarget с моими NSMutableDictionary Словари, которые я передаю (OriginalAttribs, newAttribs), не сохраняются. Я не могу иметь их как локальные iVars, так как они будут меняться при каждом действии на рисованном объекте.

Похоже, я хочу использовать retainArguments как часть NSInvocation, хотя на самом деле я не хочу их сохранять. Мне нужна их копия.

Это Жесты, которые делают это трудным, так как я не могу продолжать устанавливать OrigianlCenter, OriginalTransform, когда он изменяется, когда жест активен.

UPDATE Я нашел эту ссылку , и похоже, что я хочу сделать.

Я настроил свой 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. Согласно документации здесь говорится, что она должна передать ее себе (цели), а не отменить сам менеджер?

...