2015-12-15 92 views
1

我正在嘗試將Swift iOS應用程序轉換爲Swift 2.我設法刪除了編譯器錯誤(從stackoverflow獲得了一些很大的幫助)但是一旦編譯完成,我遇到了應用程序的問題。我的應用程序有一個tabBarController與3個選項卡。當我選擇第二個選項卡時,該應用程序現在會因'SIGABRT'錯誤而崩潰。Swift - 無法將'UINavigationController'類型的值轉換爲'MapViewController'

我得到的錯誤:

Could not cast value of type 'UINavigationController' (0x106fbd588) to 'FlightTracker.MapViewController' (0x105722430)

對於下面的代碼:

let mapviewcontroller = self.tabBarController?.viewControllers?[0] as! MapViewController 

爲何不能投的控制器作爲一個MapViewController?我是有這樣的工作之前的iOS 9 &斯威夫特2.

+0

因爲,正如消息所言,標籤欄控制器的視圖控制器陣列中的第一個視圖控制器是導航控制器,而不是地圖視圖控制器。既然你提到了第二個標籤,也許你想'viewControllers?[1]'不''[0]'? – Paulw11

+0

這仍然給我:'不能將類型'UINavigationController'(0x10661d588)的值轉換爲'FlightTracker.MapViewController'(0x104d82430)'。在使用'[0]'索引進行更新之前,我的應用程序完美工作。如果它自己改變了,我會感到驚訝。 – user3185748

+0

好的,那只是一個猜測,因爲我無法看到你的代碼和應用程​​序的結構。我能告訴你的是,你的標籤欄的viewController數組包含UINavigationControllers而不是MapViewController。 – Paulw11

回答

2

它應該工作

let navigationController = self.tabBarController?.viewControllers?[0] as! UINavigationController //Check which is your tab on your storyboard, 0, 1, n ? 

let mapviewcontroller = navigationController.viewControllers[0] as! MapViewController 

self.tabBarController?.viewControllers?[0] =>這是你的UINavigationController

在你的故事板你的tabBarController連接到N UINavigationController S和你的一個UINavigationController到你的MapViewController。

+0

當我改變索引時,我仍然得到:'不能將類型'UINavigationController'(0x111c2d588)的值轉換爲'FlightTracker.MapViewController'(0x110392430)'。正如我所提到的,這個確切的指數在更新之前已經很好地工作了,所以如果改變了,我會感到驚訝。 – user3185748

+0

我編輯了我的答案@ user3185748 – hla

相關問題