Создание элемента статуса - появляется значок, меню нет - PullRequest
0 голосов
/ 19 декабря 2011

В основанном на документе проекте я пытаюсь создать меню статуса. У меня есть одноэлементный класс, который создает строку состояния, и, как вы можете видеть, я инициирую ее из делегата приложения. Когда я запускаю это, я не получаю ошибок, а только изображение строки состояния, но меню не выпадает. Я создал меню в IB. Что я испортил?

Делегат

#import "KBAppDelegate.h"
#import "KBStatusMenu.h"

@implementation KBAppDelegate
@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{
    KBStatusMenu *aStatusItem = [[KBStatusMenu alloc] init];
    aStatusItem = [[KBStatusMenu instance] buildStatusItem];
}
@end

.h

#import <Foundation/Foundation.h>

@interface KBStatusMenu : NSObject 
{
    NSStatusItem *myStatusItem;
    NSImage *statusImage;
    IBOutlet NSMenu *myStatusMenu;
}

+ (KBStatusMenu *)instance;
- (id)buildStatusItem;

@end

.m

* * 1010

1 Ответ

0 голосов
/ 19 декабря 2011

Вы объявили myStatusMenu как розетку, но никогда не загружали перо (или что-то ему назначали). Розетка не может получить объекты из ниоткуда; розетка устанавливается только тогда, когда вы загружаете перо, к которому подключено что-либо (или назначаете что-то переменной, как будто это не розетка).

Это можно доказать, добавив строку к buildStatusItem, в которой записывается значение переменной экземпляра myStatusMenu. Я ожидаю, что это будет nil.

Что вам нужно сделать, это:

* * 1010 Создать перо для содержания меню элемента состояния. Установить класс Владельца файла на KBStatusMenu. В KBStatusMenu внедрите init, чтобы загрузить только что созданное перо.

Затем, когда вы достигнете buildStatusItem, при загрузке пера будет установлена ​​розетка, и у вас будет меню для предоставления вашего статуса.

Я бы рекомендовал создать только один KBStatusMenu экземпляр. В этом случае я рекомендую использовать синглтон: init должен проверить, был ли уже установлен gInstance, и, если это так, вернуть его; только если он не должен инициализироваться и возвращать self.

...