2012-01-03 42 views
0

我正在用Objective C构建一个iPhone应用程序。在我的应用程序中,我正在绘制图像上的描边,并且想要实现撤消和重做功能。我为此已使用NSUndoManager。有了这个功能,我可以在一个层次上撤销我的绘图,但是我的要求是在最低可能级别(或至少最低10级)撤消绘图。我已经将setLevelsOfUndo设置为10,但它不起作用。NSUndoManager没有为UnDo /重做图形的iPhone应用程序保留重做/撤消堆栈

我用下面的代码:

- (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]; 
    } 
} 

请让我知道我在哪里不正确。我已经为此长期使用了Google,但没有找到功能失败的确切原因。

回答

0

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

如果这是您唯一想要撤消/重做的事情,那么我会看看registerUndoWithTarget:selector:object:它将持有capturedImage.image的参考。

Scott < -