2013-01-17 23 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)? – NSGod

+0

@NSGod是的,我使用ARC。我在下面嘗試你的解決方案,並讓你知道我的結果!但我認爲這將是工作:)非常感謝你!我仍然無法習慣ARC ... – namreg

回答

2

我要猜測你正在使用自動引用計數(ARC)。如果你是,那麼about:方法將會發生什麼:

你首先創建一個IGAboutWindowController的本地實例,然後告訴它顯示它的窗口。這將在屏幕上顯示窗口,但是,如果您的項目正在使用ARC,則窗口將立即消失。原因在於只要about:方法結束,您的本地實例IGAboutWindowController將自動解除分配,因此其窗口將從屏幕上移除。

要成功實現在ARC管理項目這個about:方法,你應該定義aboutController爲您IGAppDelegate類的這樣一個實例變量:

@class IGAboutWindowController; 

@interface IGAppDelegate : NSObject <...> 

@property (nonatomic, strong) IGAboutWindowController *aboutController; 

@end 

然後實現你這樣的about:方法:

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

另外,' - [NSWindowController init]'沒有任何用處。您需要使用'initWithWindowNibName:'或'initWithWindowNibName:owner:'來代替,或者在'IGAboutWindowController'中重寫'init'來發送'initWithWindowNibName:'以及正確的nib名稱。 –

+0

@NSGod它的工作原理。非常感謝 – namreg

+0

@PeterHosey是的,你是對的。謝謝 – namreg

相關問題