Ios 如何通过Swift中的Segue将数据传递到下一个视图?

Ios 如何通过Swift中的Segue将数据传递到下一个视图?,ios,swift,uiviewcontroller,uinavigationcontroller,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,我在斯威夫特发展 下图是我的故事板 有一个主视图。按下扫描(右栏按钮项)时,主视图将把视图更改为扫描视图,并将数据传递到扫描视图 self.performSegueWithIdentifier("ScanView", sender: self) 而情节提要序列的标识符是ScanView 我使用以下代码将数据从Main传递到Scan 按下扫描(右栏按钮项)时 self.performSegueWithIdentifier("ScanView", sender: self) 并将数据传递到下一

我在斯威夫特发展

下图是我的故事板

有一个主视图。按下扫描(右栏按钮项)时,主视图将把视图更改为扫描视图,并将数据传递到
扫描视图

self.performSegueWithIdentifier("ScanView", sender: self)
情节提要序列的标识符是ScanView

我使用以下代码将数据从Main传递到Scan

按下扫描(右栏按钮项)

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
    }
}
它将在
让desViewController=segue.destinationViewController为时崩溃!ScanViewController
并显示如下错误:

Could not cast value of type 'UINavigationController' (0x3960e0a8) to 'BLEConnect.ViewController' (0x5514c).

有人能教我如何解决这个问题吗?提前感谢。

错误消息非常清楚,您尝试将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
            }
        }
    }
}

您的
NavigationController
在Interface Builder中(可能)位于错误的位置。现在,当您继续时,您将转到
UINavigationController
,而不是您所期望的
ScanViewController
。这就是强制转换失败的原因,因为您试图强制
UINavigationController
成为
ScanViewController

要解决此问题,您应该将
MainViewController
放在
UINavigationController
中,然后直接转到
ScanViewController

准确显示了如何使用界面生成器、UINavigationController和segues来实现您的目标。

您可以将导航控制器嵌入到主视图控制器中,并像上面所做的那样执行segue。这应该可以解决问题


显示错误消息是因为您使用类型casted导航控制器而不是扫描视图控制器

错误消息非常清楚;您试图强制强制将UINaigationController转换为ScanViewController。您可以将主视图控制器嵌入导航控制器而不是扫描视图,否则需要从导航控制器的ViewController属性访问扫描视图控制器。我也不喜欢从扫描视图回到主视图的那个序列的外观。您应该使用展开序列,或者如果您将主视图控制器嵌入导航控制器中,则默认情况下“后退”按钮将在那里