我在Swift开发。
以下图片是我的故事板。
有主视图。 主视图会将视图更改为扫描视图,并在按时将数据传递到 Scan view
扫描(右栏按钮项目)。
StoryBoard Segue 的标识符是 ScanView
我使用以下代码将数据从主传递到扫描
按扫描(右栏按钮项目)。
self.performSegueWithIdentifier("ScanView", sender: self)
并将数据传递到下一个视图
//prepare jumping to next page
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier=="ScanView"){
let desViewController = segue.destinationViewController as! ScanViewController
desViewController.myCenteralManager = myCenteralManager
}
}
它会在let desViewController = segue.destinationViewController as! ScanViewController
崩溃并显示如下错误:
Could not cast value of type 'UINavigationController' (0x3960e0a8) to 'BLEConnect.ViewController' (0x5514c).
有人可以教我如何解决这个问题吗?提前谢谢。
答案 0 :(得分:1)
错误消息非常清楚,您尝试将segue.destinationViewController
设为ScanViewController
,而实际上它是导航控制器。您需要先获取导航控制器,然后使用其topViewController
属性来获取目标视图控制器。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if (segue.identifier=="ScanView") {
if let navController: UINavigationController = segue.destinationViewController as? UINavigationController {
if let desViewController: ScanViewController = navController.topViewController as? ScanViewController {
desViewController.myCenteralManager = myCenteralManager
}
}
}
}
答案 1 :(得分:0)
您的NavigationController
(可能)在Interface Builder中的位置错误。现在,当你离开时,你将转向UINavigationController
而不是ScanViewController
,就像你期望的那样。这就是演员表失败的原因,因为你试图强迫UINavigationController
成为ScanViewController
。
要解决此问题,您应将MainViewController
放入UINavigationController
,然后直接转到ScanViewController
。
This guide显示了如何使用Interface Builder,UINavigationController和segues来实现您想要做的事情。
答案 2 :(得分:0)
您可以将导航控制器嵌入到主ViewController 中,然后像上面那样执行segue。那应该可以解决问题。
显示错误消息是因为您输入的类型为导航控制器,而不是扫描ViewController 。