2013-05-22 50 views
0

我有一個相對較長的任務。所以我從AppDelegate調出一個單獨的窗口(NSWindowController)以顯示進度。它就像關閉窗口並釋放NSWindowController

//AppDelegate.m 
if (self.progresswindow == nil) { 
    self.progresswindow = [[ProgressController alloc] initWithWindowNibName:@"ProgressController"]; 
} 

[progresswindow showWindow:self]; 
//[[progresswindow window] setReleasedWhenClosed:NO]; 
[NSApp runModalForWindow:progresswindow.window]; 

當任務完成後,進度窗口將自動關閉。

//ProgressController.m 
[NSApp stopModal]; 
[self close]; 

它工作正常。但是,當我點擊一個按鈕以啓動另一個具有相同窗口的任務會話時,應用程序將不會運行任務,但它會打開。看起來最後一個實例沒有被釋放。進度窗口有以下幾行。

- (void)windowDidLoad { 
    NSLog(@"Hey!"); 
} 

NSLog將不會被第二次調用。我不知道我做錯了什麼?從AppDelegate調用setReleasedWhenClosed不起作用。無論如何,我有關閉時釋放複選框。我讀了類似於我需要觀察的內容NSWindowWillCloseNotificationdifferent topic中的進度窗口,以便我可以在關閉時釋放它。但我正在使用ARC。所以我不能手動發佈它,我可以嗎?同時,如果我打開Apple的示例(TableViewPlayground),似乎他們使用此通知。此外,我讀過this topicthis topic。但我不知道問題是什麼。

我欣賞任何建議。感謝您的時間。

回答

1

發佈進度窗口控制器。

+0

我請你原諒? –

+0

self.progressWindow(控制器)包含窗口控制器。窗口控制器保存它的窗口。 (在筆尖上,由於傳統原因,現在稍微複雜一點,但現在)。 下次輸入動作時,您將重新使用現有的窗口控制器,並使用現有的窗口。如果您不想要這種行爲,請將代理的屬性設置爲nil,這樣下次將出現窗口控制器的新實例(及其窗口)。 –

+0

謝謝你的建議。像progresswindow = nil; ?這條線意外解決了這個問題。 –