【问题标题】:prepareForSegue fatal error swiftprepareForSegue 致命错误迅速
【发布时间】:2021-02-24 23:16:11
【问题描述】:

我正在尝试运行我的应用程序,但是每当我单击按钮时,都会弹出此错误:“致命错误:在展开可选值时意外发现 nil”我知道这与我的 prepareForSegue 函数有关,因为当我将其取出时该应用程序运行良好。我正在尝试使用 prepareForSegue 函数从我的其他视图控制器中检索变量和其他内容。这是我的代码。

hideBannerAds 是一个布尔值。

override func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObject?) {
    var FirstDest : View3 = segue.destinationViewController as View3

      if hideBannerAds == true {
            FirstDest.adBannerView2.removeFromSuperview()
        }

    }

【问题讨论】:

  • 首先,你应该测试调用了哪个 segue 标识符,像这样:if segue.identifier == "identifier_from_segue" {...} 其次,你应该提供更多的代码,这样会更容易查看
  • 在你想让你的应用程序崩溃之前,使用as 操作符永远不会很好。如果还有其他问题需要处理,您应该改用 as?

标签: swift


【解决方案1】:

尝试改变

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

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

通过查看 Sid 提到的代码,您也应该尝试

if segue.identifier == "name of segue " {
    var vc = segue.destinationViewController as View3
}

【讨论】:

    【解决方案2】:

    我认为正确的方法是:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "your_identifier_here"
        {
            if let destinationVC = segue.destinationViewController as? View3{
                //Change your properties here
            }
        }
    }
    

    但在prepareForSegue 内部,您正试图从超级视图中删除尚未加载的视图。所以你应该在 View3 中设置一些属性标志,以便知道是否应该加载视图,并在 View3 viewDidLoad() 中根据你设置的这个标志删除(或避免加载)你的视图。

    【讨论】:

    • 这解决了我的一个问题,但是当我按下按钮时应用程序仍然崩溃。它仍然说错误。它还显示此错误:线程 1:EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe)。
    • 您不能删除 prepareForSegue 中的视图。你改了吗?
    • 我用了你这里放的代码,还是出现错误。
    • 您无法执行:prepareForSegue() 内部的 FirstDest.adBannerView2.removeFromSuperview()。
    • 是的,所以我把它放在里面 if let destinationVC = segue.destinationViewController as?查看3
    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多