Как реализовать отменить с помощью NSUndoManager? - PullRequest
1 голос
/ 01 сентября 2010

Я пытаюсь добавить NSUndoManager в мою программу, но я не уверен, как зарегистрировать методы у менеджера?используя:

[myUndoManager registerUndoWithTarget:selector:object:];

что если у меня есть следующий метод:

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

Как я могу зарегистрировать этот метод в менеджере отмены?Объект селектора (отправителя) - это не то, что я хочу зарегистрировать.Мне нужно уменьшить myFoo, yourFoo и fooFoo одним вызовом отмены.

1 Ответ

2 голосов
/ 01 сентября 2010

Напишите другой метод -(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;
   }
}
...