Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSUndoManager不使用redo/undo保留iPhone应用程序的堆栈以进行撤消/重做图形_Iphone_Objective C_Undo_Nsundomanager_Redo - Fatal编程技术网

NSUndoManager不使用redo/undo保留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

我正在用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
的副本。因此,由于您正在释放它并将其设置为新图像,对原始图像的引用将丢失,您只需使用当前的
capturedImage.image调用UnDoImage1:

如果这是您要撤消/重做的唯一操作,那么我将查看
注册表和target:selector:object:
它将保留
capturedImage.image的引用

斯科特