Swift - Unwind Segue触发错误

时间:2016-01-10 15:38:47

标签: ios xcode swift

我第一次使用Unwind Segue方法。我有多个视图控制器,如下图所示(其中一些显示当然)。在编辑配置文件中,我有一个完成按钮。点击后,我会触发一个触发展开segue的IBAction。

以下是导航栏中“完成”按钮的代码:

@IBAction func unwindToMainViews(sender: UIStoryboardSegue) {
    //let sourceViewController = sender.sourceViewController
    self.performSegueWithIdentifier("unwindToMainSegue", sender: self)        
}

并在

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

我正在执行以下操作,将数据从编辑配置文件传回主视图

if (segue.identifier == "unwindToMainSegue") {
    // pass data to next view
    let tabCtrl = segue.destinationViewController as! UITabBarController
    let destinationVC = tabCtrl.viewControllers![0] as! HomeViewController
            destinationVC.userObject = self.userObject;
}

当匹配segue标识符并执行代码(将userObject从此控制器传输到另一个控制器)时,它会触发错误:

  

无法将'app.EditProfileViewController'类型的值(0x100b99d80)转换为'UITabBarController'(0x104a1d030)。

如何修复此错误?我很惊讶,因为我正在向UITabBarController投掷,所以认为它应该工作。

enter image description here

1 个答案:

答案 0 :(得分:2)

您不会在展开segue 中返回UITabBarController。您将返回触发原始segue的ViewController,或者返回触发原始segue的ViewController。

正如@jlehr在评论中所说:

  

放松segues不会返回任何东西;他们解雇任何推动和   在源视图和目标视图之间显示视图控制器   控制器。目的地是执行的地方   找到unwind方法,无论源视图控制器如何   出现了。

要展开触发原始segue的viewController,您需要在要返回的viewController中实现@IBAction func returnToHere(segue: UIStoryboardSegue)函数。

然后,当您通过拖动到退出图标设置完成按钮时,从弹出窗口中选择returnToHere

要将数据传递回sourceViewController,请将展开segue 标识为“unwindToSource”,然后在要返回的viewController中覆盖prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "unwindToSource" {
        let dvc = segue.destinationViewController as! SourceViewController
        dvc.userObject = self.userObject
    }
}