我的目标是在主视图中的表中创建一个新行,标题为存储在namePrompt
中的UIAlert的输入。我怎么做到这一点?
目前,当我尝试创建一个新行时(使用iPad模拟器右上角的+
按钮,运行iOS 8),它会崩溃应用程序。我不确定我做错了什么,并且对任何帮助都表示赞赏。
代码:
func insertNewObject(sender: AnyObject) {
//prompt for kid name
var namePrompt = UIAlertController(title: "Add Child", message: "Please enter child name", preferredStyle: UIAlertControllerStyle.Alert)
namePrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
namePrompt.addAction(UIAlertAction(title: "Add Child", style: UIAlertActionStyle.Default, handler: nil))
namePrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Johnny"
})
self.presentViewController(namePrompt, animated: true, completion: nil)
let childName: AnyObject = namePrompt.textFields![0]
//add new object w/ above name
objects.insertObject(childName, atIndex: 0)
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
我认为问题来自let childName: Any Object
行和/或objects.insertObject
行。
- 的修改 -
当我构建/运行项目时,代码中没有给出任何错误,但是当我尝试添加新行时,只要按下+
按钮,我就会{{1}来自0x1fbaff4: nopw %cs:(%eax,%eax)
。这与行Thread 1
(在下面的代码段中)行相关(上面let object = objects[indexPath.row] as NSDate
行的默认值是NSDAte)。我将objects.insertObject
更改为NSDate
并发生了同样的事情。
NSString
答案 0 :(得分:1)
您似乎假设在显示警报后立即填写UIAlertController的textFields。这并没有给用户任何时间来实际填写字段。
将let childName = namePrompt.textFields![0]
行(及其后续行)改为其中一个按钮操作,并等待用户在阅读textField之前点按该按钮。
<强> - 编辑 - 强>
以下是我建议修改的代码。我尽可能少地修改代码。请注意,有一个if语句可以防止空的childNames,但它不会防止有人进入一堆空格。你可能应该使这部分更加健壮。
func insertNewObject(sender: AnyObject) {
//prompt for kid name
var namePrompt = UIAlertController(title: "Add Child", message: "Please enter child name", preferredStyle: UIAlertControllerStyle.Alert)
namePrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
namePrompt.addAction(UIAlertAction(title: "Add Child", style: UIAlertActionStyle.Default, handler: { (alertAction) in
let childName = (namePrompt.textFields![0] as UITextField).text as String
if childName != "" {
self.objects.insert(childName, atIndex: 0)
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
}))
namePrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Johnny"
})
self.presentViewController(namePrompt, animated: true, completion: nil)
}