Я изучаю Какао, и я получил возможность отменить работу без особых проблем. Но setActionName: метод меня озадачивает. Вот простой пример: игрушечное приложение, окна которого содержат одну текстовую метку и две кнопки. Нажмите кнопку Вкл, и на этикетке появится надпись «Вкл.». Нажмите кнопку «Выкл.», И надпись изменится на «Выкл.». Вот два соответствующих метода (единственный код, который я написал для приложения):
-(IBAction) turnOnLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOffLabel:) object:self];
[[self undoManager] setActionName:@"Turn On Label"];
[theLabel setStringValue:@"On"];
}
-(IBAction) turnOffLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOnLabel:) object:self];
[[self undoManager] setActionName:@"Turn Off Label"];
[theLabel setStringValue:@"Off"];
}
Вот что я ожидаю:
- Я нажимаю кнопку Вкл.
- Метка меняется на «Вкл.»
- В меню «Правка» есть пункт «Отменить включение метки»
- Я щелкаю этот пункт меню
- Метка меняется на «Выкл»
- В меню «Правка» есть пункт «Повторить метку включения»
На самом деле, все эти вещи работают, как я ожидаю, кроме последнего. Элемент в меню «Правка» гласит «Повторить отключить метку», а не «Повторить включить метку». (Когда я щелкаю по этому пункту меню, метка действительно включается, как и следовало ожидать, но это делает название пункта меню еще более загадочным.)
Что я неправильно понимаю и как я могу заставить эти пункты меню отображать так, как я хочу?