【问题标题】:Pass data via 'prepareForSegue' in Swift 2在 Swift 2 中通过“prepareForSegue”传递数据
【发布时间】:2016-03-04 09:20:37
【问题描述】:

试图将字符串从一个视图控制器传递到另一个视图控制器(MoreDetailViewController)

出现这个错误:

Interface Builder 文件中的未知类 MoreDetailViewController。 无法将“UIViewController”(0x10f4ae308)类型的值转换为“ParseStarterProject_Swift.MoreDetailViewController”(0x10d512060)。 (lldb)

很抱歉,这很明显,但我最近才开始编码。谢谢! :)

代码:

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

    if (segue.identifier == "showDetail") {
        let detailController : MoreDetailViewController  = segue.destinationViewController as! MoreDetailViewController
        detailController.receivedId = selectedId

    }
}

【问题讨论】:

  • 您是否在 Storyboard 中将UIViewController 的自定义类设置为MoreDetailViewController

标签: ios swift


【解决方案1】:

您的第二个视图控制器是否在 Interface Builder 中正确设置为 MoreDetailViewController

您可以轻松检查:打开您的 .xib 或 .storyboard 文件,选择您的第二个视图控制器,然后在 Identity Inspector(右侧面板,第三个选项卡)上输入您的类名。

【讨论】:

    【解决方案2】:

    错误只是说segue目标视图控制器不是MoreDetailViewController。您也不应该强制打开它,在这种情况下,如果对象不正确,它将崩溃。

    if segue.identifier == "showDetail" {
        if let vc = segue.destinationViewController as? MoreDetailViewController {
            vc.receivedId = selectedId
        }
    }
    

    编辑

    没有看到之前的答案是完全相同的代码。对此感到抱歉。

    【讨论】:

    • 正如另一条评论中提到的,segue 要么总是工作(如果参数设置正确),要么从不工作,这肯定不是有意的。所以在这种情况下可选绑定是没有意义的。
    • 当然,对于 segue 本身来说是这样,但不是为了防止出现问题时崩溃。我在上面的文字中清楚地说明了 OP 问题的原因 - 就像其他人在线程中一样:)
    【解决方案3】:

    试试这个:

          if segue.identifier == "showDetail"
            {
                if let detailController = segue.destinationViewController as? MoreDetailViewController
                {
                  detailController.receivedId = selectedId
                 }
            }
    

    注意:不要忘记将 viewcontroller 类设置为 MoreDetailViewController

    【讨论】:

    • 由于控制器是在 Interface Builder 中设计的,如果标识符和自定义类设置正确,它将永远不会是可选的。
    • 安全总比抱歉好。此外,假设您在情节提要中进行了更改。您不会完全测试整个应用程序,然后将应用程序推送到应用商店。突然之间,您将遇到大量提供很少信息的崩溃,而不是一个无法正常工作的按钮。在我看来,让应用程序以错误的方式运行而不是崩溃要好得多。
    • 崩溃或故障的用户体验——segue 永远不会被执行——实际上并没有什么区别。可选绑定的概念不是为了支持开发者的粗心@ClockWise
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多