Почему NSStatusItem отображается несколько раз?

К NSStatusItem прикреплено NSMenu, и одна из кнопок NSMenu открывает окно NSWenu. При каждом нажатии одной из этих кнопок окно открывается, как и ожидалось, и работает правильно, но открывается другое отображение NSStatusItem.

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

Все отлично работает, кроме этого.

Это не так уж много информации, но я не могу придумать ничего другого, что могло бы вам помочь. Я был бы рад предоставить больше информации или попробовать что-нибудь.

РЕДАКТИРОВАТЬ: Каждый раз, когда нажимается кнопка, каким-то образом вызывается awakeFromNib, поэтому происходит еще один полуработающий NSStatusItem.

РЕДАКТИРОВАТЬ: Временное решение состоит в том, чтобы поместить метод awakeFromNib в dispatch_once,

РЕДАКТИРОВАТЬ: Добавлен метод, который срабатывает при нажатии кнопки, как предложено @zpasternack

- (IBAction)preferences:(id)sender {
    self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];
    [[self windowController] showWindow:self];
}

1 ответ

Решение

Содержится ли NSStatusItem в наконечнике PreferencesWindow? Это может объяснить это, так как вы загружаете перо каждый раз, когда нажимаете кнопку.

Кроме того, есть ли причина, по которой вам нужно пересоздавать это окно при каждом нажатии кнопки? Может быть, вы могли сделать это только в первый раз?

- (IBAction)preferences:(id)sender {
    if( self.windowController == nil ) {
        self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];
    }
    [[self windowController] showWindow:self];
}
Другие вопросы по тегам