NSUndoManager не хранит стек с возвратом / отменой для приложения iPhone для чертежей UnDo / Redo - PullRequest
0 голосов
/ 03 января 2012

Я создаю приложение для iPhone с Objective C. В моем приложении я рисую штрихи на изображении и хочу реализовать функции отмены и возврата.

Я использовал NSUndoManager для этого. Благодаря этому я могу отменить мой рисунок на один уровень вниз, но мое требование - отменить рисунок на его минимально возможном уровне (или, по крайней мере, минимум на 10 уровней ниже). Я уже установил setLevelsOfUndo на 10, но он не работает.

Я использую следующий код:

- (void)UnDoImage1:(UIImage*)image
{
    if (capturedImage.image != image)
    {
        [self.managedObjectContext.undoManager undo];
        [[self.managedObjectContext.undoManager prepareWithInvocationTarget:self] UnDoImage1:capturedImage.image];
        [capturedImage release];
        capturedImage.image = [image retain];
    }
}

Пожалуйста, дайте мне знать, где я ошибаюсь. Я уже давно гуглил по этому, но не нашел точную причину сбоя функциональности.

1 Ответ

0 голосов
/ 21 марта 2012

Я не верю, что вы можете использовать prepareWithInvocationTarget: с объектом в качестве параметра.Нельзя хранить копию capturedImage.image для стека отмены / повтора.Так как вы освобождаете его и устанавливаете его на новое изображение, ссылка на оригинал теряется, и вы просто будете вызывать UnDoImage1: с текущим значением capturedImage.image

отменить / повторить, тогда я бы посмотрел на registerUndoWithTarget:selector:object: он будет содержать ссылку capturedImage.image.

Скотт <- </p>

...