0

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

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

4

1 回答 1

0

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

如果那是您要撤消/重做的唯一事情,那么我会registerUndoWithTarget:selector:object:认为它将保留capturedImage.image.

斯科特<-

于 2012-03-20T21:04:11.240 回答