我正在使用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];
}
}
请告诉我错误的地方。我已经谷歌搜索了很长时间但没有找到功能失败的确切原因。
答案 0 :(得分:0)
我不相信您可以将prepareWithInvocationTarget:
与对象一起用作参数。它不会为撤消/重做堆栈保留capturedImage.image
的副本。因此,由于您要将其发布并将其设置为新图像,因此对原始图像的引用将丢失,您只需使用当前capturedImage.image
如果那是你唯一要撤消/重做的东西,那么我会看registerUndoWithTarget:selector:object:
它会保留capturedImage.image
的引用。
斯科特< -