NSUndoManager没有保留一个iPhone应用程序的重做/重做堆栈



我正在用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];
    }
}

请让我知道我错在哪里。我已经在谷歌上搜索了很长时间,但没有找到功能失败的确切原因。

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

如果这是你唯一想要撤销/重做的事情,那么我会看看registerUndoWithTarget:selector:object:,它会保留capturedImage.image的引用。

Scott<-

相关内容

  • 没有找到相关文章

最新更新