gpt4 book ai didi

ios - 删除导致崩溃的 UITableViewCell

转载 作者:行者123 更新时间:2023-11-28 08:11:57 25 4
gpt4 key购买 nike

我知道有很多关于这个主题的帖子,我已经浏览了其中的大部分,但我仍然无法解决删除 tableViewCell 导致我的应用程序崩溃并出现以下错误时遇到的问题:

Assertion failure in -[UITableViewRowData rectForRow:inSection:heightCanBeGuessed:]
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0})'

我使用

显式设置了我的行高

tableView.rowHeight = 140

我的删除代码如下

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
let object = self.datastore[indexPath.row]

do {
try self.realm?.write {
self.realm?.delete(object)

self.datastore.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: .none)
}

} catch let error {

}
}
deleteAction.backgroundColor = .red

return [deleteAction]
}

这确实会从 dataStore 中正确删除项目。我在这里尝试了多种不同的解决方案,例如在 mainThread 上调用删除、重新加载整个数据源等,但它仍然崩溃。

我的 numberOfRowsInSection方法被调用并在删除后返回正确的行数,因此这似乎不是问题所在。

虽然我认为它在这里崩溃了,但添加了一个通用异常断点

      func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? Cell {
cell.image.kf.cancelDownloadTask()
}
}

kf 这里是 kingfisher 库,因为我想在删除单元格时取消图像下载

我注意到如果我使用

  `tableView.dequeueReusableCell(withIdentifier: "Cell")`

代替 tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

这不会崩溃,所以这可能是我的解决方案,但我很想知道这里出了什么问题。我知道“forIndexPath”方法应该始终返回一个单元格,但在这种情况下由于 nil 而崩溃。

我在另一个不依赖 didEndDisplaying:Cell 方法的 viewController 中有相同的删除代码,这不会崩溃

最佳答案

您需要在 didEndDisplaying 中更改此行。您需要获取现有单元格。

let cell = tableView.cellForRowAtIndexPath(indexPath) 

关于ios - 删除导致崩溃的 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43512999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com