如何修复“ tableView.reloadData()”以使我的应用程序崩溃:致命错误:意外地发现nil,同时隐式展开了一个可选值

时间:2019-07-16 19:08:41

标签: ios swift xcode

我正在尝试将项目添加到数组,然后在表视图中显示它。 在我的情节提要中,我有一个表格视图,该表格视图可以很好地处理预加载的数据。 然后在下面,我添加了带有按钮和textField的容器视图,因此它出现在最后一个加载的单元格下面。

现在,我尝试将输入到文本字段中的文本作为单元格添加到表格视图中。我可以将其添加到存储所有“单元格数据”的数组中。这可行。但是,一旦在按钮操作中尝试“ tableView.reloadData()”,我的应用就会崩溃。

因此,由于它们都在同一View上,因此没有许多教程可以使用的viewWillAppear函数。我想要获得最佳的用户体验。

以Apples Reminders应用程序为例。在最后一行中,您可以编写一些文本,按回车键,它将被添加到表格视图中。

我已经检查了所有插座,因此它们已正确连接。 尝试将table.delegate = self添加到viewdidload()。然后,该应用程序在此行崩溃,并显示相同的错误。

寻找解决方案,找到遇到同样问题但仍未解决的人...

导入UIKit

ViewController类:UIViewController,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var table: UITableView!
@IBOutlet weak var addItemBtnOutlet: UIButton!
@IBOutlet weak var addItemTextField: UITextField!

@IBAction func addItem(_ sender: Any) {

    if let textFieldInput = addItemTextField.text {
        //Fügt dem Items Array einen Wert hinzu, wenn das Textfeld nicht leer ist

        items.addItem(text: textFieldInput)
        print(textFieldInput)

        //leert das Textfeld wieder (für weitere Eingaben)
        addItemTextField.text = ""

        //aktualisiert die TableView, damit das neu hinzugefügte Item dort sichtbar ist.

        table.reloadData()
    }

}




//temporary Tests
let items = Item()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.


    //1
    items.addItem(text: "Bananas")
    //2
    items.addItem(text: "Stawberries")
    //3
    items.addItem(text: "Bread")
    //4
    items.addItem(text: "Tomatos")
    //5
    items.addItem(text: "Shampoo")
    //6
    items.addItem(text: "Cheese")
    //7
    items.addItem(text: "Ham")
    //8
    items.addItem(text: "Fish")
    //9
    items.addItem(text: "Orange Juice")
    //10
    items.addItem(text: "Milk")



    //Sets automaticDimension for rowheight (Optional)
    //tableView.rowHeight = UITableView.automaticDimension
}

// Return the number of rows for the table.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    //returns number of items in Array
    return items.itemArray.count
}

// Provide a cell object for each row.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let itemString = items.itemArray[indexPath.row]

    // Fetch a cell of the appropriate type.
    let cell = tableView.dequeueReusableCell(withIdentifier: "TextInputCell", for: indexPath) as! TextInputTableViewCell
        // Configure the cell’s contents.
    //cell.clipsToBounds = true
    cell.configure(text: itemString, placeholder: "")




    return cell
}

}

ITEM CLASS

导入基金会 导入UIKit

//临时物品的类别 类项目{

var itemArray = [String]()

//Appends a new Item to the Item Array
func addItem(text: String){
    itemArray.append(text)
}


//removes the Item at Index X
func removeItem(index: Int){
    itemArray.remove(at: index)

}

}

我希望在table.reloadData()之后,我的视图使用新添加的项再次加载所有单元格。

应用程序在table.reloadData()行崩溃,并显示错误消息: 线程1:致命错误:在隐式展开可选值时意外发现nil

也许这是因为容器视图创建了另一个ViewController?

0 个答案:

没有答案