【问题标题】:NSUndoManager not keeping the stack with redo/undo for an iPhone app for UnDo/Redo drawingsNSUndoManager 没有为 iPhone 应用程序的撤消/重做绘图保留重做/撤消堆栈
【发布时间】:2012-01-03 07:40:09
【问题描述】:

我正在使用 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];
    }
}

请让我知道我在哪里不正确。我已经用谷歌搜索了很长时间,但没有找到功能失败的确切原因。

【问题讨论】:

    标签: iphone objective-c undo nsundomanager redo


    【解决方案1】:

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

    如果这是您要撤消/重做的唯一事情,那么我会查看registerUndoWithTarget:selector:object:,它将保留capturedImage.image 的引用。

    斯科特

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 2021-06-04
      • 2023-03-10
      • 2015-03-30
      • 2011-08-04
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多