【问题标题】:Swift Firebase. Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)迅捷火力基地。线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)
【发布时间】:2016-11-21 16:14:30
【问题描述】:

如果我是正确的:EXC_BAD_INSTRUCTION 意味着应用程序崩溃是因为某些东西不存在。 (在谷歌上搜索并试图让我的头绕开它之后)

但是我得到了错误:

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

当我尝试加载另一个视图时。

这是应用崩溃的函数:

 func loginUserNeedsEmailVerification() {

    let next = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
    next.isUserLoggedInButNeedsEmail = true
    self.present(next, animated: true, completion: nil)
}

我正在调用这个函数。从像这样的另一个函数:

perform(#selector(loginUserNeedsEmailVerification), with: nil, afterDelay: 0)

即使文件存在,我也将 ! 更改为 ?,如下所示:

let next = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
    next?.isUserLoggedInButNeedsEmail = true
    self.present(next?, animated: true, completion: nil)

然后在最后一行抛出另一个错误:

可选类型的值未解包。

当我点击小修复它时。它将代码更改为:

self.present((next?)!, animated: true, completion: nil)

但那也会出现这样的错误:

可选链无效

我做错了什么,我该如何解决?

【问题讨论】:

  • 您是否在任何类中声明了一个带有数据库引用的全局变量?
  • @Dravidian 我不确定这与呈现的视图控制器有什么关系?是的,我有标准的 FIRDatabase.database().reference()
  • @JamesG 这次崩溃与 Firebase 无关。检查storyboard属性是nil还是instantiateViewController方法返回的UIViewController实例是nil

标签: swift firebase exc-bad-instruction


【解决方案1】:

我刚刚在实例化视图控制器中遇到了同样的问题, 但这有点不同,因为我是从另一个类调用该方法。

查看问题的常见方法是在storyboard 之后将? 设置为! 像这样 : self.storyboard!.instantiateViewController

您可能会看到此错误
fatal error: unexpectedly found nil while unwrapping an Optional value,
这意味着故事板被发现为零。就我而言,我不知何故未能获得 UIStoryboard 的现有引用(因为我从另一个类调用)。

我找到的解决方法是先重新声明UIStoryboard:
let next = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
我不确定为什么会这样,因为它仍然没有获得故事板的当前参考,但它对我有用。

【讨论】:

  • 谢谢先生。你节省了我的时间! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 2019-12-09
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多