此IBAction将打开一个带有两个文本框的UIAlertController。一个盒子代表名字,另一个盒子代表年龄。我正在尝试让用户不必输入他们的年龄,如果他们不想输入。现在,如果他们没有输入他们的年龄,应用程序就会崩溃,因为person.age = Int16(points!)!
行显示“线程1:致命错误:在解包可选值时意外发现nil”。我正在尝试使用if else语句停止此操作。但是我错过了什么呢?
@IBAction func addRowBtn(_ sender: Any) {
let alert = UIAlertController(title: "Add Person", message: nil, preferredStyle: .alert)
alert.addTextField { (textField) in
textField.placeholder = "Task"
}
alert.addTextField { (textField) in
textField.placeholder = "Points"
textField.keyboardType = .numberPad
}
let action = UIAlertAction(title: "post", style: .default) { (_) in
let name = alert.textFields?.first!.text!
let age = alert.textFields?.last!.text!
if name != nil && age != nil {
let person = Person(context: PersistenceServce.context)
person.name = name
person.age = Int16(age!)!
PersistenceServce.saveContext()
self.people.append(person)
self.table.reloadData()
}
if name != nil && age == nil {
let person = Person(context: PersistenceServce.context)
person.name = name
person.age = 0
PersistenceServce.saveContext()
self.people.append(person)
self.table.reloadData()
}
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
}
发布于 2018-06-03 03:39:41
为了避免解包问题,我建议你这样做:
let action = UIAlertAction(title: "post", style: .default) { (_) in
if let ageString = alert.textFields?.last?.text,
let age = Int16(ageString),
let name = alert.textFields?.first?.text {
let person = Person(context: PersistenceServce.context)
person.name = name
person.age = age
PersistenceServce.saveContext()
self.people.append(person)
self.table.reloadData()
} else if let name = alert.textFields?.first?.text {
let person = Person(context: PersistenceServce.context)
person.name = name
person.age = 0
PersistenceServce.saveContext()
self.people.append(person)
self.table.reloadData()
}
}
https://stackoverflow.com/questions/50660345
复制相似问题