【发布时间】: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.navigationController是nil。这意味着控制器不在UINavigationController内。您确定不想关闭控制器吗?
标签: swift null interface-builder nsdate uistoryboard