В awakeFromNib:
приложение еще не полностью запущено, только этот NIB-файл был распакован.На этом этапе этот метод дает вам возможность завершить (объектно-локальную) инициализацию.Приложение (вполне вероятно) не готово обрабатывать события или выполнять действия.
Вы должны запустить это действие из метода applicationDidFinishLaunching:
, необязательного метода в делегате приложения, и передать элемент состояния, например щелчок.будет делать (потому что вы запрашиваете его для bounds
).
Обновление. Это сложнее, чем я думал.Оказывается, NSStatusItem не имеет представления, связанного в тот момент, когда вызывается делегат.Рискну сказать, что это ошибка с NSStatusItem
.Когда statusItem.view
вызывается в applicationDidFinishLaunching:
, метод popover получает nil
и жалуется.
Единственный (частичный, см. Ниже) обходной путь, который я нашел, состоит в том, чтобы вручную установить кнопку как вид в awakeFromNib:
, например:
- (void)awakeFromNib
{
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
self.statusItemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 83, 22)];
self.statusItemButton.title = @"Locating...";
self.statusItemButton.bordered = NO;
[self.statusItemButton setAction:@selector(clickStatusBar:)];
self.statusItem.view = self.statusItemButton;
}
Таким образом, вы получитепосмотреть вокруг, когда приложение завершено запуск.Но будьте осторожны, он не похож на стандартный.
PS. И что любопытно, и даже не работает каждый раз. Я должен бросить мяч здесь.Сожалею.Может быть, сохранить местоположение в настройках по умолчанию, когда Somone щелкает.Я думаю, что видел такое несоответствие в Cloud.app и всплывающем окне рядом с элементом статуса, и, возможно, теперь мы знаем, почему:)