Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用NSUndoManager实现撤消?_Iphone_Objective C_Nsundomanager - Fatal编程技术网

Iphone 如何使用NSUndoManager实现撤消?

Iphone 如何使用NSUndoManager实现撤消?,iphone,objective-c,nsundomanager,Iphone,Objective C,Nsundomanager,我正在尝试将NSUndoManager添加到我的程序中,但我不确定如何向管理器注册这些方法?使用: [myUndoManager registerUndoWithTarget:selector:object:]; 如果我有以下方法怎么办: -(IBAction)tapButton:(id)sender { myFoo++; yourFoo++; //incrementing integers fooFoo++; } 如何向撤消管理器注册此方法?选择器(发送器)

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

[myUndoManager registerUndoWithTarget:selector:object:];
如果我有以下方法怎么办:

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

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

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

[undoManager registerUndoWithTarget: self selector: @selector( decrementIntegers ) object: nil];
- (void) setMyFoo: (int) newMyFoo;
{
   if (myFoo != newMyFoo) {
      [[undoManager prepareWithInvocationTarget: self] setMyFoo: myFoo];
      myFoo = newMyFoo;
   }
}
在此方法中,您需要再次注册原始方法以提供重做:

[undoManager registerUndoWithTarget: self selector: @selector( tapButton: ) object: self];
但更好的方法是对整数使用访问器,并在其中撤消注册。大概是这样的:

[undoManager registerUndoWithTarget: self selector: @selector( decrementIntegers ) object: nil];
- (void) setMyFoo: (int) newMyFoo;
{
   if (myFoo != newMyFoo) {
      [[undoManager prepareWithInvocationTarget: self] setMyFoo: myFoo];
      myFoo = newMyFoo;
   }
}