是否可以在没有Core Data的情况下使用NSUndoManager?

时间:2012-12-05 13:17:25

标签: ios4 uigesturerecognizer nsundomanager

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

我想要做的是使用撤消和重做功能 我阅读了有关Core Data和NSUndoManager的所有内容,我有理解它的问题,因为我试图做的一切......都不起作用。

我的问题是:是否可以在没有核心数据的情况下使用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是零,但为什么呢? 我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以与核心数据分开使用NSUndoManager。关于NSUndoManager的大量信息out there

你需要做更多的阅读并理解NSUndoManager可以和不能为你做什么,看看它如何适合UIViews等。也许暂时忘记核心数据并专注于{{1 }}

“因为我要做的一切......不起作用” - 如果您遇到特定问题,可以在StackOverflow上询问有关它们的问题。如果您只说“它不起作用”,我们无法帮助您了解具体细节。

除了NSUndoManager的细节之外,还有与撤消和重做操作相关的设计模式,例如命令模式。参见例如Best design pattern for "undo" feature