在 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 迁移后未调用 UITableViewDelegate 方法
打印可变展开 Segue - Xcode 8.0 Swift 3.0