对于UnDo / Redo绘图的iPhone应用程序,NSUndoManager不会使用重做/撤消堆栈

时间:2012-01-03 07:40:09

标签: iphone objective-c undo nsundomanager redo

我正在使用Objective C构建一个iPhone应用程序。在我的应用程序中,我在图像上绘制笔划,并希望实现撤消和重做功能。

我已经使用了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 :(得分:0)

我不相信您可以将prepareWithInvocationTarget:与对象一起用作参数。它不会为撤消/重做堆栈保留capturedImage.image的副本。因此,由于您要将其发布并将其设置为新图像,因此对原始图像的引用将丢失,您只需使用当前capturedImage.image

调用UnDoImage1:

如果那是你唯一要撤消/重做的东西,那么我会看registerUndoWithTarget:selector:object:它会保留capturedImage.image的引用。

斯科特< -