2012-09-19 65 views
5

我使用Xcode模板創建了一個新的空白標準應用程序。刪除了MainMenu.xib中的窗口,並使用xib創建了一個新的自定義的NSWindowController子類。如何使用NSWindowController在標準應用程序中顯示窗口?

它們被命名爲「WYSunFlowerWindowController.h」和「WYSunFlowerWindowController.m」。

我追加然後初始化函數如下圖所示:

- (id)init 
{ 
    NSLog(@"init()"); 

    return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self]; 
} 

而且我WYAppDelegate.m文件是象下面這樣:

static WYSunFlowerMainWindowController* windowController = nil; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
    if (windowController == nil) { 
     windowController = [[WYSunFlowerMainWindowController alloc] init]; 
    } 
    [[windowController window] makeKeyAndOrderFront:windowController]; 
} 

和我有問題,這個窗口無法顯示它是在我啓動應用程序後自行完成。任何人都能告訴我爲什麼?我的代碼有問題嗎?

我是Objective-C和可可的新手。所以我想我可能犯了一個愚蠢的錯誤,我無法自己弄清楚。

更新:

這是我的項目源碼。普萊斯看看,幫我弄清楚什麼是我的錯誤。

https://dl.dropbox.com/u/3193707/SunFlower.zip

+0

您是否啓用了ARC?我發現使用ARC時,窗口控制器會被取消分配,除非我將其設置爲應用程序委託的屬性(我確信有其他方法可以執行此操作)。 – sosborn

+0

我正在使用ARC。我將windowController作爲AppDelegate類的靜態字段。我認爲它不會被解除分配,直到應用程序終止。 – morphinewan

回答

2

在你的init方法,我覺得你有你回到自己之前設置自我到超INIT第一。

-(id)init 
{ 
    NSLog (@"init()"); 
    self = [super initWithWindowNibName:@"WYSunFlowerWindowController" owners:self]; 
    return self; 
} 

編輯

嘗試用[windowController showWindow:self]

更換makeKeyAndOrderFront:這時如果仍然無法正常工作,檢查你的窗口控制器廈門國際銀行,確保文件所有者設置爲WYSunFlowerWindowController和IBOutlet窗口(在NSWindowController中聲明)連接到窗口。

編輯2:

註釋掉你@property,並在控制器@synthesize窗戶的伎倆。不要重新聲明已經在超類中預定義的get和setter。

+0

感謝您的幫助。我遵循你的指示,沒有任何改變。仍然沒有工作。 – morphinewan

+0

我已經完成了你提到的所有事情。不行。我不介意你可以下載我的項目源文件來看看嗎? https://dl.dropbox.com/u/3193707/SunFlower.zip – morphinewan

+0

哦,我的天,它的工作!非常感謝。但我很困惑,爲什麼在子類中定義的window outlet屬性會導致這個問題?他們不能重寫類的父項的相同屬性嗎? – morphinewan

相關問題