【问题标题】:Unexpected Nil when unwrapping String? makes app crashed展开字符串时出现意外的零?使应用程序崩溃
【发布时间】:2016-08-13 11:36:09
【问题描述】:

我的应用有一个屏幕,可以接受一些输入,例如title: String?desc: String?dueDate: NSDate?。如果给出了所有输入,则返回并通过委托/协议将数据传递到上一个屏幕,否则,阻止导航并显示弹出警告。

这是验证输入和执行导航的代码:

func pushView(sender: AnyObject) {
    if .........
    //Some codes to check inputs
    else {
        let aReminder = Reminders(title: self.remTitle.text!, dueDate: self.dueDate, desc: self.remDesc.text!)

        self.delegate!.addReminder(aReminder)

        //error drops on this line
        self.navigationController!.popViewControllerAnimated(true)
    }
}

应用程序检查空输入并按预期显示警告,但当我填写所有文本框并更改 datePicker 时,我收到错误 unexpectedly found nil while unwrapping an Optional value

我已通过var dueDate = NSDate() 将默认值设置为dueDate,但仍然出现此类错误,而文本框均已填写。

【问题讨论】:

  • 错误在哪一行?
  • pushView 中的if 子句中检查 || dueDate == nil,这意味着在else 子句中dueDate 也可以是nil并在展开时导致崩溃。最简单的解决方案是将dueDate 声明为非可选,默认值为nowvar dueDate = NSDate()。但是你必须删除所有的nil变量检查。
  • 是的,我设置了默认值var dueDate = NSDate() 并修复了运行它的代码。但nil 警告仍然出现。
  • 错误就在self.navigationController!.popViewControllerAnimated(true)这一行上
  • @LKPhucNguyen 那么这意味着self.navigationControllernil。这意味着控制器不在UINavigationController 内。您确定不想关闭控制器吗?

标签: swift null interface-builder nsdate uistoryboard


【解决方案1】:

我忘记在Main.StoryBoard 中放置导航控制器。所以为了解决这个问题,我已经这样解决了:

  • Navigation Controller 从对象库拖到情节提要中,
  • 然后 Control + 从Navigation Controller 拖动到当前View Controller
  • 选择Root View Controller作为两者的关系

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2018-04-25
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多