Ios 正在努力向alertview添加多个文本字段

Ios 正在努力向alertview添加多个文本字段,ios,swift,uialertview,Ios,Swift,Uialertview,我试图创建一个警报视图,在点击广告按钮后将一个或多个项目添加到我的表视图中。按下add(添加)按钮时,alertview(警报视图)应显示三个项目名称、价格和数量文本字段,按下ok(确定)按钮时,将添加项目,无论数量增加多少次。当我点击按钮时,虽然我得到以下错误: Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 0 beyo

我试图创建一个警报视图,在点击广告按钮后将一个或多个项目添加到我的表视图中。按下add(添加)按钮时,alertview(警报视图)应显示三个项目名称、价格和数量文本字段,按下ok(确定)按钮时,将添加项目,无论数量增加多少次。当我点击按钮时,虽然我得到以下错误:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray'
以下是功能:

func createAlertView() -> UIAlertController {

    let view = UIView(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(250), height: CGFloat(100)))
    let itemName = UITextField(frame: CGRect(x: CGFloat(10), y: CGFloat(0), width: CGFloat(252), height: CGFloat(25)))
    itemName.borderStyle = .RoundedRect
    itemName.placeholder = "Item Name"
    itemName.keyboardAppearance = .Alert
    itemName.delegate = self
    view.addSubview(itemName)

    let itemPrice = UITextField(frame: CGRect(x: CGFloat(10), y: CGFloat(30), width: CGFloat(252), height: CGFloat(25)))
    itemPrice.placeholder = "Item Price"
    itemPrice.borderStyle = .RoundedRect
    itemPrice.keyboardAppearance = .Alert
    itemPrice.delegate = self
    view.addSubview(itemPrice)

    let itemQuantity = UITextField(frame: CGRect(x: CGFloat(10), y: CGFloat(60), width: CGFloat(252), height: CGFloat(25)))
    itemQuantity.placeholder = "Item Quantity"
    itemQuantity.borderStyle = .RoundedRect
    itemQuantity.keyboardAppearance = .Alert
    itemQuantity.delegate = self
    view.addSubview(itemQuantity)

    let alertController = UIAlertController(title: "Add Item", message: nil, preferredStyle: .Alert)
    alertController.view.addSubview(view)

    return alertController
}

func createAlertViewItem(alertController: UIAlertController, itemName: String, itemStringPrice: String) {

    let managedContext = self.bill.managedObjectContext
    let entity = NSEntityDescription.entityForName("Item", inManagedObjectContext: managedContext!)
    let newItem = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

    if let itemName = alertController.textFields?.first?.text {

        newItem.setValue(itemName, forKey: "name")

    }
    if let itemPriceString = alertController.textFields?[1].text {

        let itemPriceNumber = Int(itemPriceString)

        newItem.setValue(itemPriceNumber, forKey: "price")
    }

    do {
        try managedContext!.save()
    }
    catch let error as NSError {
        print("Core Data save failed: \(error)")
    }

    let currentItems = self.bill.mutableSetValueForKey("items")
    currentItems.addObject(newItem)

    self.tableView.reloadData()
}

@IBAction func addNewItem(sender: UIButton) {

    let alertController = createAlertView()

    let itemName = alertController.textFields![0].text
    let itemPrice = alertController.textFields?[1].text
    let itemQuantity: Int!

    if alertController.textFields![2].text == "" {
        itemQuantity = 0
    } else {
        itemQuantity = Int((alertController.textFields?[2].text)!)!
    }

    let okAction = UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
        if itemQuantity == 0 || itemQuantity == 1 {
            print(2)
            self.createAlertViewItem(alertController, itemName: itemName!, itemStringPrice: itemPrice!)
        } else {
            for _ in 0...itemQuantity {
                print(3)
                self.createAlertViewItem(alertController, itemName: itemName!, itemStringPrice: itemPrice!)
            }
        }
    })

    alertController.addAction(okAction)

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
    alertController.addAction(cancelAction)

    presentViewController(alertController, animated: true, completion: nil)
}

我认为在将视图添加到警报视图时,我遗漏了一些内容,但我看不出是什么,因为我认为错误表明它找不到文本字段。不过我不能肯定。任何帮助都会很好。谢谢

您不应尝试管理警报控制器的视图层次结构。相反,请使用方法
addTextField(configurationHandler:)
将文本字段添加到警报控制器。我建议看一下Xcode中的
UIAlertController
类引用。这是有据可查的

编辑:
此外,我建议不要将
UIAlertController
称为“alertview”。在以前的iOS版本中,我们使用了一个名为a
UIAlertView
的类,但现在已经不推荐使用了。术语“alertview”会让人们认为您使用的是旧的弃用类。

您见过其他这些吗?如果是这样,试着推断。错误消息似乎表明方法调用之间存在nil对象,因此请确保在这些方法之间使用共享引用。在添加UITextfield之前和之后检查对象值,以验证控制器的状态。将您的alertController添加为对UIViewController类的引用,并在进行所需更改时检查其状态。

但当我向UIAlertController添加第三个文本字段时,我无法访问它,这就是为什么我认为必须通过创建自定义视图来添加它们。或者我遗漏了什么?或者,你也可以在你的故事板中创建一个自定义视图。将其添加到要显示它的视图控制器中。使其不可见或将其置于屏幕外。然后,只要您想显示它,就用一些动画来显示它。此过程将让您完全控制外观。感谢您的帮助。如果我找不到alertviewcontroller的解决方案,我将尝试这样做。