Как я могу сделать Названия действий отмены / повтора NSUndoManager работают правильно?

Я изучаю Cocoa, и мне без особых проблем удалось отменить операцию. Но метод setActionName: меня озадачивает. Вот простой пример: игрушечное приложение, окна которого содержат одну текстовую метку и две кнопки. Нажмите кнопку «Вкл.», И на этикетке появится надпись «Вкл.». Нажмите кнопку Off, и надпись изменится на «Off». Вот два соответствующих метода (единственный код, который я написал для приложения):

-(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"];
}

Вот чего я ожидал:

  • Я нажимаю кнопку «Вкл.»
  • Метка меняется на «Вкл.»
  • В окне редактирования в меню есть пункт «Отменить включение метки»
  • Я щелкаю этот пункт меню
  • Метка меняется на «Выкл.»
  • В меню «Правка» находится пункт «Вернуть метку включения»

Фактически , все эти вещи работают так, как я ожидал, кроме последнего. Пункт в меню «Правка» гласит «Вернуть выключить ярлык», а не «Вернуть ярлык включения». (Когда я щелкаю по этому пункту меню, метка становится «Вкл.», Как я и ожидал, но это делает название пункта меню еще более загадочным.)

Что я неправильно понял, и как я могу заставить эти пункты меню отображать то, что я хочу?

7
задан Gabriel Roth 22 April 2019 в 14:07
поделиться