2012-04-30 59 views
1

我以模態方式從視圖控制器調用標籤欄控制器,以實現用戶可以配置的一系列附加控件和輸入。在故事板中,這很容易做到,但我怎樣才能最好地將Core Data託管對象上下文傳遞給Tab控制器託管的視圖控制器?這裏最好的設計方法是什麼:使用核心數據與故事板中的標籤欄控制器

  1. 要忘記故事板,並在代碼中執行應用程序的這部分?這很簡單。在將它們添加到Tab控制器之前,我只是將託管對象上下文傳遞給每個視圖。
  2. 將託管對象上下文屬性添加到啓動標籤視圖控制器的視圖控制器?這當然可以在每個目標視圖控制器中使用presentingViewController屬性,但似乎並不是最初的目的。
  3. 直接通過根視圖控制器的某些屬性進行通信?我在網上看到了這一點,但我不確定這一點。

Appart從管理的數據上下文中,不需要從dismissModalViewController消息返回到原始視圖。其他一切都通過Core Data進行管理。

回答

0

當您的主視圖控制器獲得-prepareForSegue:消息時,它所管理的標籤欄控制器和視圖控制器將已經創建。你可以從SEGUE本身的標籤欄控制器,然後從標籤欄控制器獲得視圖控制器的陣列,像這樣:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UITabBarController *tbc = [segue destinationViewController]; 
    NSArray *controllers = [tbc viewControllers]; 
    NSLog(@"View Controllers: %@", controllers); 
} 

現在,你會想要做一個小錯誤檢查,以確保目標控制器確實是標籤欄控制器,但您可以使用代碼替換NSLog()以配置控制器,只要您喜歡。出於您的目的,這只是意味着將他們應該操作的託管對象上下文交給他們。

1

幾個選項:

  1. 期間prepareForSegue傳遞管理對象上下文(你要訪問的標籤視圖控制器的viewControllers陣列,讓您的個人看法控制器保持)
  2. 結構化你的應用程序,使得核心數據棧可以全局使用,可以從應用程序委託類或單獨的單例中獲得。視圖控制器然後可以在需要時請求託管對象上下文。
  3. 可能做一些代理濫用您設置一些對象作爲標籤欄控制器的代表碰巧保存託管對象上下文 - 然後將可以從標籤欄控制器中的所有視圖控制器中可用。這只是剛剛發生在我身上,可能是一個壞主意。
相關問題