NSProgressBar startAnimation называется «ИЗ действия ManiMenu» - PullRequest
0 голосов
/ 25 мая 2011

Первый вопрос в StackOverflow, а также в Cocoa newbye. Кроме того, я использую XCode 4 (будьте добры, пожалуйста!)

Сценарий:

Простой NSPersistentDocument Мультиокна: каждый документ имеет window.nib и прикрепленный WindowController Приложение запускается NSTask (в фоновом режиме), когда я нажимаю кнопку в WINDOW TOOLBAR .

В окне (внутри представления) я решил поместить хороший NSProgressIndicator (неопределенный), который анимирует при запуске задачи и stopAnimation при завершении задачи (я собираю сообщения задачи через уведомления).

Пример кода:

NSButton -> IBAction -> метод в WindowController

- (IBAction)launchSim:(id)sender 
{
[simcell launchTask];
[progBar startAnimation:self];
   .... more code ...
}

Все работает прекрасно и отлично.

Теперь (как обычно в этом сценарии) вы получаете странную ошибку и начинаете становиться непродуктивной:

Я решил запустить то же действие из MainMenu (из NSMenuItem):

В MainMenu.xib:

NSMenuItem ("RUN") -> FirstResponder -> Пользовательское действие в первом респонденте: launchSim (идентификатор типа)

Пункт меню RUN запускается правильно. Задача (у меня есть сообщения NSLog DEBUG), НО анимация (startAnimation) индикатора progressBar не запускается!

ОТЛИЧИЕ в 2 действиях:

  • первый (рабочий) вызывается из файла Nib, принадлежащего WindowController
  • второй (не работает) вызывается из MainMenu.xib и отправляется FirstResponder

Оба действия выполняют правильно другую часть кода в методе, но если я вызываю действие из меню, я не вижу никакой анимации индикатора прогресса.

Чего мне не хватает?

Спасибо и наилучшими пожеланиями

Ответы [ 2 ]

0 голосов
/ 27 мая 2011

Ну, я отвечаю себе, потому что я нахожу ошибку:

Структура является классической структурой для "продвинутого" NSPersistentDocument:

  1. один класс для документа
  2. один подкласс NSWindowController для управления представлением

это соответствует архитектуре MVC:

  • Модель: документ
  • Контроллер: прикреплен к окну
  • Вид: окно

Моя ошибка состояла в том, чтобы СОЗДАТЬ объект NSOb в представлении и связать его с NSWindowController, в то время как правильный способ сделать это - установить ваш подкласс NSWindowController как Владелец файла и теперь волшебным образом также MainMenu запустить анимацию. Это как-то связано с цепочкой респондентов, но далеко от моих текущих знаний о какао. Если кто-то может комментировать и объяснять ....

0 голосов
/ 26 мая 2011

Вам не нужно ничего делать с первым респондентом, чтобы подключить пункт меню к действию.

Заставить пункт меню выполнить действие точно так же, как заставить кнопку выполнить действие:

  • Откройте файл пера.
  • Перейдите в меню и перейдите к пункту меню «Выполнить», который должен вызвать действие.
  • Ctrl-клик по пункту меню и перетаскивание соединительной линии к контроллеру окна.
  • Когда вы отпустите перетаскивание, вы увидите всплывающее меню. Нажмите launchSim: и у вас все будет готово.
...