如何使用NSUndoManager实现撤消?

时间:2010-09-01 10:10:32

标签: iphone objective-c nsundomanager

我正在尝试向我的程序添加NSUndoManager,但我不确定如何向管理器注册方法?使用:

[myUndoManager registerUndoWithTarget:selector:object:];

如果我有以下方法怎么办:

-(IBAction)tapButton:(id)sender {
   myFoo++;    
   yourFoo++;    //incrementing integers
   fooFoo++;
}

如何使用撤消管理器注册此方法?选择器(发送者)的对象不是我想要注册的对象。我需要通过一次撤销调用来减少myFoo,yourFoo和fooFoo。

1 个答案:

答案 0 :(得分:2)

编写另一个方法-(void) decrementIntegers并注册如下:

[undoManager registerUndoWithTarget: self selector: @selector( decrementIntegers ) object: nil];

在此方法中,您需要再次注册原始方法以提供重做:

[undoManager registerUndoWithTarget: self selector: @selector( tapButton: ) object: self];

但更好的方法是使用整数的访问器并在那里撤消注册。像这样:

- (void) setMyFoo: (int) newMyFoo;
{
   if (myFoo != newMyFoo) {
      [[undoManager prepareWithInvocationTarget: self] setMyFoo: myFoo];
      myFoo = newMyFoo;
   }
}