调用dequeueReusableCell(withIdentifier:for :) swift

时间:2019-04-03 18:20:11

标签: ios swift memory-leaks

我必须展示几个不同的单元格。为此,我调用了tableView(_:cellForRowAt:),在该方法中,我对不同的UITableViceCell类使用了两个不同的ID

这是一个简单的代码:

class SimpleView: UITableViewController {
...

let cellIdMain = "JournalMainCellID"
let cellIdExtra = "JournalMainSceneAddNewID"

...

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

    if indexPath.row == journals.count {
        guard let cellAdding = tableView.dequeueReusableCell(withIdentifier: cellIdExtra, for: indexPath) as? JournalMainSceneAddNew else {
            fatalError("Cannot connect to the cell")
        }
        return cellAdding
    }

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdMain, for: indexPath) as? JournalMainSceneCell else {
        fatalError("Cannot connect to the cell")
    }
    cell.numberOfCountriesLabel.text = "\(journals[indexPath.row].numberOFCountries)"
    return cell
}
}

当我尝试查找内存泄漏时,我发现:

enter image description here

当我单击发现的详细信息时:

enter image description here

为什么会这样?它看起来非常简单明了。

已更新:图片已更新。

2 个答案:

答案 0 :(得分:0)

您正在写条件是否仅在一种情况下有效,例如indexpath.row将仅等于count 即使它无法正常工作,因为经过之后,如果它将在if之后执行代码块 这意味着您的if块是浪费的 以及为什么要使用cell.delegate ??

答案 1 :(得分:0)

使用以下代码更新您的代码。

NullPointerException