1

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

[myUndoManager registerUndoWithTarget:selector:object:];

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

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

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

4

1 回答 1

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;
   }
}
于 2010-09-01T11:07:10.953 回答