Tableview cellForRow即使在清空数组后执行reloadData也会崩溃?

时间:2017-11-06 06:17:57

标签: ios swift tableview

我一直在寻找如何在我的应用中解决我最大的问题之一,但即使我遵循此iOS/Swift: tableView cellForRowAtIndexPath crash,我的问题仍然存在。根据我提供的链接,在清空数组后总是记得重新加载数据。但问题仍然存在,我不知道如何解决。

有些日志Crashlytics ...

我的tableview cellForRowAt函数,我也在我的故事板中设置了单元格标识符。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // Crashed somewhere here
    let currentRow = displayMainCell[indexPath.row] 

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MainCell else { return UITableViewCell() } 


    if currentRow.id == "wotd" {
        cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 22)
    } else {
        cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 13)
    }

    cell.titleLabel.text = currentRow.title
    cell.contentLabel.text = currentRow.content

    return cell
}

已添加:我的didSelectRowAt在不同的View Controller中也有问题。这是实施。

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let currentRow = wordLists[indexPath.row]

    textField.text = currentRow

    let currentWordToSearch = currentRow.condenseWhitespace().lowercased()
    indicator.startAnimating()

    saveWordToHistory(currentWordToSearch)
    fetchWordFromDB(currentWordToSearch)
    wordChange(wordToEncode: currentWordToSearch, uuid: getDeviceID())

    wordLists = []
    tableView.reloadData()
    setupDatabase(suggWords: currentWordToSearch)
    tableView.isHidden = true

    textField.resignFirstResponder()
}

1 个答案:

答案 0 :(得分:1)

检查以下函数是否不返回常量值。它应该是这样的:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayName.count;
}

如果你已经这样做了。我建议你尝试以下代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MainCell else { return UITableViewCell() } 

if arrayName.count != 0 {
let currentRow = displayMainCell[indexPath.row] 

if currentRow.id == "wotd" {
    cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 22)
} else {
    cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 13)
}

cell.titleLabel.text = currentRow.title
cell.contentLabel.text = currentRow.content
}
return cell
}