在 Swift 2 中通过“prepareForSegue”传递数据

Posted

技术标签:

【中文标题】在 Swift 2 中通过“prepareForSegue”传递数据【英文标题】:Pass data via 'prepareForSegue' in Swift 2 【发布时间】: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 【参考方案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

以上是关于在 Swift 2 中通过“prepareForSegue”传递数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 2 中通过按一下按钮播放 m4a 文件?

在 Swift2 中通过 HTTP2 与 APNS 服务器通信

如何在 Swift 中通过 MR 的 id 从 coredata 中选择一条记录

在 Swift 中通过多个委托链接 UIButton 点击

在 Xcode 中通过 Objective-C 代码测试 Swift 代码

在 iOS/swift 中通过 TableView 显示静态内容