2011-05-26 21 views
1

我一直在閱讀這個thread on Stackoverflow,並一直試圖在我自己的項目中複製解決方案而沒有成功。讓UITabBarController與核心數據一起工作

我的項目有4個選項卡。在我的應用程序委託我這樣做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  


    Page1 *page1 = (Page1 *)[navController topViewController]; 
    Page2 *page2 = (Page2 *)[navController topViewController]; 
    Page3 *page3 = (Page3 *)[navController topViewController]; 
    Page4 *page4 = (Page4 *)[navController topViewController]; 

    page1.managedObjectContext = self.managedObjectContext; 
    page2.managedObjectContext = self.managedObjectContext; 
    page3.managedObjectContext = self.managedObjectContext; 
    page4.managedObjectContext = self.managedObjectContext; 


    [self.window makeKeyAndVisible]; 

    return YES; 
} 

始發的線程,它說我需要創建一個IBOutlet中每個navController因爲我想使用的核心數據的每個選項卡。

雖然您可以爲UINavigationController分配多個代理,但對於插座也是如此,您只能爲navController提供一個插座。

我可以讓Page1工作,但其他網頁只是崩潰;因爲缺乏IBOutlet。

我是否真的需要X個IBOutlets for Y Tabs,或者我可以以另一種方式做到嗎?

的另一個問題是,起始線程接受的答案是:

理想情況下,你想傳遞要麼 的NSManagedObjectContext, NSFetchedResultsController或 相關NSManagedObject「下」到 的UIViewController中。

但是沒有代碼或者如何做到這一點的例子。

理想情況下,我不想使用singelton或在所有地方使用應用程序委託。

任何確認和澄清將是偉大的。

謝謝。

回答

2

您的直接問題與Core Data無關。當每個標籤頁需要單獨的導航控制器時,您將爲每個標籤分配相同的導航控制器,否則每次更改標籤頁時,導航控制器的視圖層次結構都會受到擾亂。

您鏈接到的問題中推薦的模式稱爲「依賴注入」,這是Apple在大多數情況下推薦的模式。但是,對於tabbars或任何其他複雜的視圖/視圖 - 控制器層次結構,依賴注入可能會變得複雜。這是tabbars的一個特殊問題,因爲當應用程序啓動時,通常不會加載所有選項卡視圖/視圖控制器,而是在加載其元素之前等待每個選項卡被選中。

相反,您可以使用另一種利用UIApplication對象單例狀態的模式。由於只有一個應用程序對象,因此只有一個應用程序委託對象。這意味着,在應用程序的任何地方你都可以這樣打電話:

(MyApplicationDelegate *) appDelegate=(MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]; 

...總是得到相同的應用程序對象。

theManagedObjectContext=appDelegate.managedObjectContext 

這兩行添加到每個視圖控制器,您可以始終確保獲得應用程序的:那麼,如果你有定義爲應用程序委託的物業管理對象上下文你可以通過獲取上下文委託的託管對象上下文。

+0

你好。謝謝您的回答。只是一些澄清。我是否認爲你需要爲每個標籤創建一個獨立的導航插口或控制器?至於appDelegate,我一直認爲使用這個核心數據是不好的做法。我會嘗試2個想法。 1.爲每個選項卡創建4個IBOutlets。 2.爲每個選項卡創建4個不同的導航控制器?或者我可以避免所有這些,只是使用你的想法使用appDelegate – zardon 2011-05-27 10:35:52

+0

看來你是對的,讓每個選項卡中的appDelegate不僅更容易,而且不會丟失上下文。謝謝! – zardon 2011-05-30 20:23:41