2013-05-28 68 views
0

我有困難傳遞數據到被容納在容器視圖內,在這裏可以看到一個tableViewController:
enter image description here
對於上下文,其中包含兩個容器視圖的視圖控制器本身是tabViewController的第一個選項卡,充當splitViewController的詳細視圖的主視圖。集裝箱觀點與傳遞數據

首先 - 我是否正確使用容器視圖?第一個選項卡的目的是在頂部顯示一些可通過push segue編輯的過濾器設置(因此它是一個導航控制器),在底部,tableView的數據將根據過濾條件進行更新。使用兩個容器視圖來完成這個功能似乎很直觀,但我幾乎沒有經驗,也不知道是否有更好的方法,或者容器視圖的效用比看起來好多少。

對於原始問題 - 假設這個層次結構有意義,我無法將數據傳遞給此特定的tableViewController。還有其他兩個選項卡在tabViewController,兩者都不利用容器視圖,所以我已經能夠成功地遍歷以顯示在使用的appDelegate這些標籤數據的層次結構,如下所示:

// Initial Setup 
    UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController; 
    UITabBarController *masterTabBarController = [[splitViewController viewControllers] objectAtIndex:0]; 

    // Tab 1: Filter by Location: 
    // >>> **PROBLEM CODE SEGMENT** <<< 
    UIViewController *containerViewController = [[masterTabBarController viewControllers] objectAtIndex:0]; 
    MasterViewController *masterViewController0 = [[containerViewController childViewControllers] objectAtIndex:1]; 
    masterViewController0.slotMachines = machines; 

    // Tab 2: Filter by ID#: 
    MasterViewController *masterViewController1 = [[masterTabBarController viewControllers] objectAtIndex:1]; 
    masterViewController1.slotMachines = machines; 

    // Tab 3: Audited 
    MasterViewController *masterViewController2 = [[masterTabBarController viewControllers] objectAtIndex:2]; 
    masterViewController2.slotMachines = machines; 

我已經跳過了通過代理將數據分配給每個masterViewController0/1/2的代碼片段。如前所述,表2和表3適用。選項卡1在運行時分解程序,終止是因爲'[containerViewController childViewControllers]'返回一個空數組,因此對objectAtIndex:1的調用(我希望它會引用tableView)是超出範圍的。我想知道容器視圖在程序執行的這個時候是不是初始化的?但我真的不知道。

我覺得我的查詢與容器視圖有關,並且更多地與層次遍歷有關,因此儘管在容器視圖的文檔中查看了解決方案,但我確實沒有找到太多幫助。

在此先感謝您的任何提示!

回答

1

如果您發現傳遞的數據變得越來越複雜,則創建一個單一對象,所有視圖控制器都可以訪問該對象,並將其用作接收和銷售數據對象的中介。您可以使用鍵/值或其他方案來執行此操作。

編輯:這很簡單。定義一個Foo類,並讓該類創建一個單例,併爲任何類提供一種方法來獲得它(Foo *foo = [Foo sharedFoo])。向單身人士添加方法以支持setObject:forKey:objectForKey:,就像NSMutableDictionary或任何你想要的一樣。如果你需要這個線程安全,它更難但類似 - 在這種情況下,你需要使用串行調度隊列進行所有訪問。上述每種技術都在SO上有很多帖子(單例,串行調度隊列線程等)。

現在,你所有的類都可以在其中包含Foo.h,訪問單例,併爲它提供事物或提供它。

+0

謝謝你的迴應。我想知道你是否可以在你的答案中解釋一點點?我喜歡不必手動遍歷層次結構的想法,因此使所有視圖控制器都可以訪問的類看起來非常有吸引力。你推薦任何我可以參考的文章來幫助我實現這種行爲嗎?我真的很感激它! – OneManBand

+0

感謝您的額外信息!很有幫助。 – OneManBand