2012-12-02 79 views
1

我知道這個問題有點泛泛,但我想我的問題也是通用的。 我在空閒時間開發一個小應用程序,我決定用可可來做。很好,許多事情幾乎都是自動的,但有時候很難理解框架是如何工作的。如何管理可可中的窗口

最近我遇到了一個新問題。我想從一個類,一個前端控制器基本上管理應用程序的所有窗口。我有一個主菜單和一個「導入數據」功能。當我點擊它時,我想顯示另一個包含表格的窗口並調用更新數據的方法。問題是這種方法在實現NSTableViewDataSource協議的類中。

我該如何參考該課程?更重要的是,哪個應該是正確的做法?我應該擴展NSWindow類,以便我可以接收NSWindow的實例,它可以控制包含該表的窗口(然後調用該方法)?

我可能會找到幾種方法來解決這個問題,但我想知道哪種方法最適合用於可可。

PS:我知道有噸的單證文件,但我需要2個生命做的一切,我想,所以我想我可能會使用一些幫助這裏問:)

+0

你有一個'NSWindowController'管理Windows ?您可以在前端控制器中始終擁有多個實例來管理多個窗口。 – TheAmateurProgrammer

回答

2

問題該方法是在實現NSTableViewDataSource協議的類中。

我該如何參考該課程?

這兩句話沒有意義,但我想我明白你的意思。

而不是繼承NSWindow,將導入窗口的控制邏輯 - 包括您的NSTableViewDataSource方法 - 放到控制器類中。如果控制器對應一個窗口,則可以繼承NSWindowController,儘管您不需要。

您可以在您的應用程序委託中實現-importData:作爲IBAction,然後將菜單項的選擇器連接到importData:on First Responder。該方法應該實例化導入窗口控制器並從一個筆尖加載窗口。

在您的導入窗口控制器的-awakeFromNib-windowDidLoad方法中,調用更新數據的方法。

補充:

這裏是我建議使用在你的應用程序代理模式:

@property (retain) ImportWindowController *importWC; 


- (IBAction) showImportWindow:(id) sender { 
    if (!self.importWC) 
     self.importWC = 
     [[ImportWindowController alloc] initWithWindowNibName:@"ImportWindow"]; 
    [self.importWC refreshData]; 
    [self.importWC.window makeKeyAndOrderFront:sender]; 
} 
+0

嗨,noa,謝謝你的答案。我已經做了或多或少是你說的。問題是我不能在應用程序委託中實現'-importData'方法,因爲即使窗口已經被加載,該方法也應該更新我的表上的數據,所以我不能僅僅依賴於在加載時更新數據窗戶。 – Eux

+0

要更新表上的數據,我需要訪問包含數據的數組,然後訪問tableView實例以調用'-reloadData'方法。這就是爲什麼我在談論對控制器類的實例的引用。加載窗口時創建的引用,並自動實例化用於管理表的委託類。 – Eux

+0

明白了。在這種情況下,您需要在導入窗口控制器的公共接口中使用像'-refreshData'這樣的方法 - 這是應該引用tableview的對象。 – paulmelnikow