2016-12-02 42 views
0

我有一個UITabBarController的兩個選項卡共享數據。第一個選項卡負責生成和更新第二個選項卡消耗的數據數組。具有UINavigationController作爲選項卡的UITabViewController

我的原始方法共享標籤之間的數據工作。

     ------UIViewController 
---UITabBarController 
         ------UIViewController 

使用上述方法,我訪問的數據的排列從第一選項卡,例如:

let pointsViewController = self.tabBarController?.viewControllers?.first as! ShowPointsViewController 
tableHeaders = pointsViewController.tableHeaders 

隨着ShowPointsViewController作爲第一個標籤

這是我的問題: 當我將我的第一個UIViewController嵌入到UINavigationController中,然後嘗試使用下面的代碼訪問我的數據數組時,我得到一個運行時錯誤,因爲之後的代碼返回爲零。我知道我正在訪問這個不正確,達到相同結果的正確方法是什麼?

let pointsViewController = self.tabBarController?.viewControllers?.first?.navigationController?.topViewController as! ShowPointsViewController 

回答

2

如果我沒有理解好您創建這樣的事情:

     ------UINavigationController ------UIViewController 
---UITabBarController 
         ------UINavigationController ------UIViewController 

你得到零爲self.tabBarController .viewControllers? 。首先已經是UINavigationController。

使用下面的代碼:

let pointsViewController = (self.tabBarController?.viewControllers?.first as? UINavigationController)?.topViewController as! ShowPointsViewController 
+1

Gahhhh完善這個工作。我認爲Swift的類型推斷可以讓我避免不得不作爲'UINavigationController'投射。爲什麼這不是出於好奇呢? – Sami

+1

self.tabBarController?.viewControllers包含UIViewControllers數組。並非所有的人都必須是UINavigationController(就像在你之前的例子中一樣),並且因爲你需要獲得對UINavigationController典型的topViewController屬性,所以你需要投射。 – Adamsor

0

self.tabBarController?.viewControllers?.first?是你navigationController,所以你在navigationcontroller,返回nil調用.navigationController

要解決這個問題,從你的電話中刪除.navigationController

let pointsViewController = self.tabBarController?.viewControllers?.first?.topViewController as! ShowPointsViewController 
相關問題