내 프로젝트는 문서 기반이며 상태 코드를로드하는 코드는 awakeFromNib 아래에두면 실행됩니다. systemStatusBar를 시작하는 것이 applicationDidFinishLaunching에서 작동하지 않습니다.
#import "StatusMenuAppDelegate.h"
@implementation StatusMenuAppDelegate
@synthesize window = _window;
-(void)awakeFromNib {
myStatusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
statusImage = [NSImage imageNamed:@"statusNorm.png"];
[myStatusItem setImage:statusImage];
[myStatusItem setHighlightMode:YES];
[myStatusItem setMenu:myStatusMenu];
}
@end
하지만은, 내 테스트 프로젝트 (비 문서 기반)에서, 코드가
가을 아래 applicationDidFinishLaunching에서 잘 실행됩니다. 왜? 상태 메뉴에 이상적으로이 기능을 사용하고 싶지 않습니까?
감사합니다. 개체 (KBAppDelegate.h)를 만들고 응용 프로그램 대리자로 만들었으며 이제는 applicationDidFinishLaunching에서 작동합니다. (나는 상태 표시 줄이 열려있는 문서가 무엇이든 상관없이 머물러 있기를 바라고, 최대한 빨리로드하면 applicationDidFinishLaunching이 가장 좋습니다.) KBAppDelegate가 정규 클래스가 아닌 싱글 톤이 필요한 이유는 무엇입니까? – janeh
@ janeh : 상태 항목을 만들고 소유 할 별도의 개체를 만들겠습니다. KBAppDelegate는 응용 프로그램의 대리인이어야하며 가능한 한 적게 사용해야합니다. 그것은'applicationDidFinishLaunching :'에 상태 항목 소유자 객체를 생성해야합니다; 그 객체는 순차적으로 상태 항목을 생성하고 소유해야하며, 다른 객체가 쉽게 접근하여 하나 이상의 객체가 존재하지 않도록 단일 객체가되어야합니다. –
확인. 내 KBAppDelegate.h에는 상태 표시 줄 이미지를 릴리스하는 dealloc 코드도 있습니다. 상태 생성을 다른 객체로 옮기고 applicationDidFinishLaunching에서 메소드를 호출하면, 내 dealloc은 내가 풀어려고하는 이미지를 알지 못합니다. 맞습니까? 그래서 KBStatusMenu.m에 cleanUpMethod를 만들고 KBAppDelegate.m에서 호출해야합니다. 내 질문에 dealloc 모든 개체 또는 응용 프로그램 대리자를 호출 할 수 있습니다 것 같아요? (NSLog로 테스트 해 보았지만 작동하지 않을 것 같습니다.) – janeh