2015-11-19 77 views
1

我有一個可可框架的架構問題。在NSViewController和NSTableViewDelegate之間共享方法

所以事情是,在我的應用我有一個馬西德威包含2子視圖:

  • RecentFilesTableView包含最近使用的用戶文件。用戶將通過雙擊選擇文件。
  • OtherFileView用'打開另一個文件'調用NSOpenPanel。

這兩種觀點都將在年底方法調用:openFileWithUrl(網址:NSURL)

所以,問題是:什麼是最好的(最蘋果)進行存檔呢?

解決方案1 ​​

我把方法openFileWithUrl(網址:NSURL)MasterViewConroller

RecentFilesTableDelegate將參考MasterViewConroller,將調用該方法。

我把控制器放在OtherFileViewMasterViewConroller

缺點:引用地獄(這個類引用這個,引用這個等等..)。

解決方案2

我會用MasterViewConroller作爲一個真正控制器,將在「近期的表」既雙擊作出反應,並點擊「打開另一個文件」按鈕。

我將不得不從RecentFilesTableView得到選定的文件。我沒有看到這樣做的方法(ofc。我可以將tableView.dataSource()投射到我的類,但我相信乾淨的設計不涉及這樣的投射)。

缺點:一個班級統治他們。

解決方案3

正如我不能創建一個超兩個RecentTableDelegate和MasterViewController我可以用斯威夫特擴展到開放方法添加到他們。但那不是很OOP。

那麼蘋果世界做這種事情的模式是什麼?

+0

請不要濫用標籤。這個問題沒有任何關係與Swift,Objective-C,當然不是iOS。 – nhgrif

+0

您是否考慮過綁定或第一響應者? – Willeke

回答

0

由於您希望避免重複實施openFileWithUrl(url: NSURL),因此您可以爲這些類型的操作創建單獨的類,如NetworkManager。這個解決方案與蘋果的NSFileManager一致。當您需要執行該操作時,請創建該類的實例並調用該函數。

+0

這位經理將如何將該文件的內容放入OtherFileView? – Willeke

+0

感謝您的幫助Daniel。我只是認爲可能有一些設計模式,我應該遵循這種操作。而對於你的問題Willeke:其實我不需要在OtherFileView中引用這個對象。所以問題解決了。 –

+0

@MailSO你正在考慮這樣的事情真是太棒了。我很高興它解決了。 – Daniel