无法将类型为'UITableViewController'的值转换为'UINavigationController'类型

3
我想从一个视图控制器切换到另一个,并将数据传递给下一个控制器。但是我不断收到这个错误提示:
Could not cast value of type 'UITableViewController' to 'UINavigationController' 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

   if (segue.identifier == "segueLogWaterData") {            
        // pass data to next view
        let nav = segue.destinationViewController as! UINavigationController
        let segueViewController = nav.topViewController as! WaterDataViewController 
    }
}

这种情况发生在 WaterDataViewController 作为 UITableViewController 的时候。我也尝试将 WaterDataViewController 嵌入到 UINavigationController 中,但是我得到了类似的错误:

Could not cast value of type 'UITableViewController' to 'MyApp.WaterDataViewController'

我做错了什么?


“UITableViewController”不是“UINavigationController”的相关类型。由于它们没有关联,因此它们不能相互转换。 - zaph
3个回答

5
实际上,segue.destinationViewController不是导航控制器,而是要打开的视图控制器。由于UITableViewControllerUIViewController的子类,因此这段代码应该可以正常工作:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "segueLogWaterData") {
        let dest = segue.destinationViewController as! WaterDataViewController
        //Assign to dest's properties
    }
}

0

nav.topViewController 是一个 UITableViewController。显然,WaterDataViewController 不是 UITableViewController 的子类。

你的意思是要使用 rootViewController 吗?


0
有时候我会因为在故事板中“忘记添加类”而遇到相同的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接