2013-01-17 3 views
1

Mac OS X 용 상태 표시 줄 응용 프로그램을 만들었습니다. http://d.pr/i/Covi과 같은 것입니다. 나는이 튜토리얼 http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/에 의해 그것을 만들었다. 이제 질문 : "정보"메뉴 항목을 클릭하여 창을 표시하는 방법은 무엇입니까? 나는 이것을 시도하고있다 :코코아. 트레이 응용 프로그램에서만 창을 표시하는 방법

#import "IGAppDelegate.h" 
#import "IGAboutWindowController.h" 

@implementation IGAppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
} 

- (void)awakeFromNib { 
    _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
    [_statusItem setMenu:_menu]; 
    [_statusItem setTitle:@"LeoHelper"]; 
    [_statusItem setHighlightMode:YES]; 
} 

#pragma mark - Actions 



- (IBAction)quit:(id)sender { 
    [NSApp terminate:self]; 
} 

- (IBAction)about:(id)sender { 
    IGAboutWindowController *aboutController = [[IGAboutWindowController alloc] init]; 
    [aboutController showWindow:self]; 
} 
@end 
+1

ARC (Automatic-Reference-Counting)를 사용하고 있습니까? – NSGod

+0

@NSGod 예, ARC를 사용하고 있습니다. 나는 아래의 해결책을 시도하고 내 결과를 알려주지!하지만 나는 그것이 일할 것이라고 생각한다 :) 정말 고마워! 나는 여전히 ARC에 익숙해 질 수 없다 ... – namreg

답변

2

나는 자동 참조 계산 (ARC)을 사용하고 있다고 생각한다. 그렇다면 다음은 about: 메소드에서 일어날 일입니다.

먼저 로컬 인스턴스 IGAboutWindowController을 생성 한 다음 해당 윈도우를 표시하도록 지시하십시오. 이렇게하면 화면에 창이 표시되지만 프로젝트에서 ARC를 사용하는 경우 창이 즉시 사라집니다. 그 이유는 about: 메서드가 끝나자 마자 IGAboutWindowController의 로컬 인스턴스가 자동으로 할당 취소되고 결과적으로 해당 윈도우가 화면에서 제거되기 때문입니다. 그런 다음이처럼 about: 메소드를 구현

@class IGAboutWindowController; 

@interface IGAppDelegate : NSObject <...> 

@property (nonatomic, strong) IGAboutWindowController *aboutController; 

@end 

:

성공적으로 ARC 관리 프로젝트에서이 about: 방법을 구현하려면,이처럼 IGAppDelegate 클래스의 인스턴스 변수로 aboutController을 정의해야

- (IBAction)about:(id)sender { 
    if (self.aboutController == nil) 
     self.aboutController = [[IGAboutWindowController alloc] init]; 
    [aboutController showWindow:self]; 
} 
+1

또한, '- [NSWindowController init]'은 아무 것도 유용하지 않다. 대신에'initWithWindowNibName :'또는'initWithWindowNibName : owner :'를 사용하거나,'initWithWindowNibName :'을 올바른 nib 이름으로 보내려면'IGAboutWindowController'에서'init'을 오버라이드해야합니다. –

+0

@NSGod 작동합니다. 고마워요. – namreg

+0

@PeterHosey 그래, 네 말이 맞아. 감사 – namreg

관련 문제