【问题标题】:When calling a function from another file the app crashes从另一个文件调用函数时,应用程序崩溃
【发布时间】:2017-12-26 06:24:31
【问题描述】:

我是 Swift 新手,所以希望这将是一些简单的事情,但我发现没有任何帮助。

我正在使用 SWRevealViewController 在我的应用程序中添加一个侧边菜单,它基本上在常规视图控制器的一侧创建了一个表视图控制器。当用户点击其中一个单元格时,我希望能够调用常规视图控制器中的函数。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  ViewController().testFunction()
}

然后调用函数:

func testFunction() {
    button1.setTitle("TEST", for: .normal)
}

现在,应用程序正确调用了这个函数,但我得到了错误

fatal error: unexpectedly found nil while unwrapping an Optional value

如果我要求函数 Print("test") 而不是更改按钮标题,那绝对可以。当我尝试从同一个常规视图控制器调用该函数时,没有错误,并且按钮会更改文本。

【问题讨论】:

    标签: ios swift3 swrevealviewcontroller


    【解决方案1】:

    崩溃的原因是这一行:

    ViewController().testFunction()
    

    你要做的是创建一个全新的 ViewController 实例并调用一个方法来处理它的一个属性。现在,我们可以放心地假设您的 button1 是您在 Interface Builder 中创建的按钮 - 因此在您尝试访问它时它并不存在。

    你应该做的是在一些已经存在的 ViewController 实例上调用这个方法,而不是创建一个全新的实例(无论如何这没有多大意义 - 它不在导航堆栈中,它只存在于本地你的didSelectRowAt)

    【讨论】:

    • 如何选择已经调用的 ViewController 实例?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多