在 Xcode 8 和 Swift 3.0 中删除覆盖后准备 segue 崩溃

Posted

技术标签:

【中文标题】在 Xcode 8 和 Swift 3.0 中删除覆盖后准备 segue 崩溃【英文标题】:Prepare for segue crashing after removing override in Xcode 8 and Swift 3.0 【发布时间】:2016-09-16 17:52:26 【问题描述】:

在从 Xcode 8 beta 5 更新到 Xcode 8 最终版本后,并从我的所有 prepare for segue 方法中删除覆盖后,它们都在运行时崩溃。

这是我的代码示例:

这是按钮的操作方法:

@IBAction func actionRequested(_ sender: AnyObject) 

    if sender as! UIButton == shoppingButton
    
        print("executed from inside of actionRequested Method")
        performSegue(withIdentifier: "toShopping", sender: self)
    

这是segue的准备方法。

// MARK: - Navigation
func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) 
    print("executed from inside of prepare For segue method")
    if segue.identifier == "toShopping"
    
        let newHomeViewController = segue.destination as!  HomesTableViewController
        newHomeViewController.profile = self.profile
    


这是错误:

executed from inside of actionRequested Method
fatal error: unexpectedly found nil while unwrapping an Optional   value
2016-09-16 10:30:06.194590 Fredi[2567:551009] fatal error: unexpectedly found nil while unwrapping an Optional value  

请注意,在删除覆盖之前,我所有的 segue 准备方法都在工作,现在我在所有方法中都遇到了相同的错误。任何人都可以指出我解决这个问题的正确方向吗?

提前谢谢你。

【问题讨论】:

我已经做到了。感谢您的建议。 【参考方案1】:

不要删除override,您是在隐藏问题而不是修复它。在 Xcode 8 beta 6 中,prepare for segue 方法的签名发生了变化。

现在应该是:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

【讨论】:

那么,为什么我把它放回 Xcode 8 最终版本时会出现编译器错误? 你在我的回答中使用了Any而不是AnyObject的签名吗? 是的,它起作用了,但只有在我再次重新安装 Xcode 之后。不知道为什么以前没有使用新签名。感谢您的帮助。这解决了我的问题。【参考方案2】:

我终于解决了它重新安装 Xcode 并使用 Dan 提出的方法签名。

感谢您的回复。

【讨论】:

以上是关于在 Xcode 8 和 Swift 3.0 中删除覆盖后准备 segue 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 在 Xcode 8 Swift 3.0 中获取特定的 JSON?

Swift 3.0 xCode 8 迁移吊舱

Swift 3.0 和 Xcode 8 迁移后未调用 UITableViewDelegate 方法

打印可变展开 Segue - Xcode 8.0 Swift 3.0

自定义幻灯片 Segue - Xcode 8.0 Swift 3.0

在 XCode 8.2 / Swift 3.0 中更改状态栏样式(没有“查看基于控制器的状态栏外观”)