2013-02-16 58 views
1

好的,這是我的情況,我真的不確定使用哪種設計方法。所以,我會很高興閱讀我的特殊情況下,一些輸入...全局訪問類實例 - 最佳設計方法?

場景:

  • 我有一個基於標籤的應用程序
  • 最初,我們創建一個實例的NSWindowController(例如MyDocumentManager)這需要的標籤創建/操縱
  • 每個標籤包含(=連接到)的MyDocument
012一個實例的護理

現在,我即將實施菜單操作。

  • 對於每個菜單有一個單獨的菜單控制器(實際上的NSObject分組的所有相關功能的子類),例如MyFileMenuController
  • 文件菜單的操作鏈接到行動中MyFileMenuController對象,通過界面生成器

問題:

  • 怎麼可能是MyFileMenuController「知道」MyDocumentManager(在我的AppDelegate.m中創建),以便我們可以訪問當前文檔詳細信息並執行所有相關操作?有任何想法嗎?哪種方法更可取?

我的想法:

  • 從類傳遞對象類(不探空大)
  • 單身(雖然我說實話從來沒有使用過,不知道是否/如何可能是我的特殊情況)
  • 通知&通知監聽器
  • (它從反面看,雖然不知道)的委託方法

回答

0

OK(不知道這是做到這一點的最好方式),但是這是我決定的事情:

[[[NSApplication sharedApplication] delegate] MyDocumentManager] 

所以,只要一個對象是我的AppDelegate的一部分,這樣我就可以從任何地方訪問它。

0

我會做一個初始的UIViewController鏈接到appDelegate.rootViewController。

在這個新的視圖控制器(只是稱之爲「mainViewController」),我會把我的tabBar和menuController。

我知道你的界面類似於帶有左側按鈕的facebook,它可以進行水平滾動並發現菜單。因此,在選擇此leftBarButton我會打電話的方法等:

- (void)discoverMenuForDocument:(MyDocument*)document { 
    // Set menu configuration for specific document 
    // Make animation to discover menu 
} 

如果文件可以是這樣的:

self.selectedViewController (<-- You cand make this in several ways depending on your code...) 

要認識到,(myDocument中*)是不是一個對象,但只是一個參考,所以我認爲這樣做沒有任何問題。

祝你好運!

+0

感謝您的建議。雖然我絕對不能發現你的答案和我的問題之間的聯繫......:S(btw,我不是在談論可可觸摸 - 問題是關於可可/ OSX)。 – 2013-02-16 12:41:16

+0

對不起,我在iOS中以一種常見模式思考。 – RubenVot 2013-02-18 12:16:44