0

我创建了一个没有核心数据的应用程序。该应用程序具有许多功能,例如使用手势、颜色和文本操作视图。

我想要做的是使用撤消和重做功能。
我阅读了有关 Core Data 和 NSUndoManager 的所有内容,但我无法理解它,因为我尝试做的所有事情......都行不通。

我的问题是:是否可以在没有 Core Data 的情况下使用 NSUndoManager?
并且:我怎样才能实现视图的撤消?

一个操作可以改变我的对象叫做 aView (UIImageView) 我在 undoManager 中注册了信息

编辑

- (IBAction)rotationDetected:(UIRotationGestureRecognizer *)gestureRecognizer {

    static CGFloat initialRotation;
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){
        initialRotation = atan2f(gestureRecognizer.view.transform.b, gestureRecognizer.view.transform.a);
    }
    CGFloat newRotation = initialRotation + gestureRecognizer.rotation;
    aView.transform = CGAffineTransformMakeRotation(newRotation);

    //undo
    [self.undoManager registerUndoWithTarget:self selector:@selector(rotationDetected:)object:aView];
    [self.undoManager setActionName:NSLocalizedString(@"viewChanged",@"title undo")];
}

此处描述了单击按钮调用的撤消方法:

-(void)undo: (id) sender{ 

    [aView.undoManager undo];
    [[self undoManager] undo];
}

如果我插入一个 if 子句询问是否 undoManager.canUndo == YES,它会返回 undoManager 不能撤消。
这意味着 undoManager 为 nil,但为什么呢?我错过了什么?

4

1 回答 1

0

是的,您可以NSUndoManager与 Core Data 分开使用。大量关于 NSUndoManager 的信息

你需要做更多的阅读,了解什么NSUndoManager可以为你做,什么不能为你做,看看它如何适合 UIViews 等。也许暂时忘记 Core Data 并专注于NSUndoManager.

“因为我正在尝试做的一切......不工作” - 如果您遇到特定问题,您可以在 StackOverflow 上提出有关它们的问题。如果您只说“它不起作用”,我们无法为您提供具体帮助。

除了细节之外NSUndoManager,还有一些与撤消和重做操作相关的设计模式,例如命令模式。参见例如“撤消”功能的最佳设计模式

于 2012-12-05T13:23:19.260 回答