我目前有DetailViewController
来自ViewController
的{{1}},它嵌入UINavigationViewController
,我想嵌入UITabBarController
。当我第一次在storyboard
上执行此操作时,我的应用程序因错误而崩溃:
"无法转换类型' UITabBarController' (0x10badf258)到' UINavigationController' (0x10badf208)"
经过研究,我添加了前两行(let tabVc =, and let navVc = )
并仍然崩溃。创建成功的TabBarController
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let tabVc = segue.destinationViewController as! UITabBarController
let navVc = tabVc.viewControllers!.first as! UINavigationController
if segue.identifier == "ShowItem" {
if let row = tableView.indexPathForSelectedRow?.row {
let item = itemStore.allItems[row]
let detailViewController = segue.destinationViewController as! DetailViewController
detailViewController.item = item
detailViewController.imageStore = imageStore
}
}
}
更新:应用更改后,我的错误已更改为
"无法转换类型' UITabBarController' (0x103ff6258)to' Photomania.ItemsViewController' (0x1029520d0)"
答案 0 :(得分:0)
正如错误明确指出的那样,这行代码失败了:
let navVc = tabVc.viewControllers!.first as! UINavigationController
根据错误,tabVC中的第一个viewController不是navigationVC。
因此,请确保标签栏的排列顺序正确,并确保tabVC的第一个viewController确实是导航视图控制器。
答案 1 :(得分:0)
我认为你正在以错误的方式解决问题。您可以在imageStore
中设置itemStore
的{{1}}和ItemsViewController
。
viewDidLoad
但如果您希望在override func viewDidLoad() {
super.viewDidLoad()
self.itemStore = ItemStore()
self.imageStore = ImageStore()
}
的{{1}}中执行此操作,那么您就是这样做的。
didFinishLaunchingWithOptions