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