NSUndoManager不使用redo/undo保留iPhone应用程序的堆栈以进行撤消/重做图形
我正在用Objective C构建一个iPhone应用程序。在我的应用程序中,我正在图像上绘制笔划,并希望实现撤销和重做功能 为此,我使用了NSUndoManager不使用redo/undo保留iPhone应用程序的堆栈以进行撤消/重做图形,iphone,objective-c,undo,nsundomanager,redo,Iphone,Objective C,Undo,Nsundomanager,Redo,我正在用Objective C构建一个iPhone应用程序。在我的应用程序中,我正在图像上绘制笔划,并希望实现撤销和重做功能 为此,我使用了NSUndoManager。有了它,我可以在一个级别上撤消我的图形,但我的要求是在最低级别上撤消图形(或至少在10个级别上撤消)。我已经将setLevelsOfUndo设置为10,但它不起作用 我正在使用以下代码: - (void)UnDoImage1:(UIImage*)image { if (capturedImage.image != imag
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
的副本。因此,由于您正在释放它并将其设置为新图像,对原始图像的引用将丢失,您只需使用当前的capturedImage.image调用UnDoImage1:
如果这是您要撤消/重做的唯一操作,那么我将查看注册表和target:selector:object:
它将保留capturedImage.image的引用
斯科特