更新UITableView时,新建可见行的缺失单元格崩溃

iOS*_*eek 18 uitableview ios swift

我删除一行时遇到崩溃.

// Updating my data model 
....
// apply the updates
self.tableView.beginUpdates()
self.tableView.deleteRows(at: indexPathsToDelete, with: .automatic)
self.tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)

重现的步骤 - 添加行 - 删除行,特别是确保当前屏幕外有一些行(当删除成功时将显示在屏幕中 - 重复直到崩溃发生

它并不总是发生,所以我最好的猜测是它只会在它试图加载的单元格被回收时发生

这是使用Xcode 8.0的10.0模拟器

  *** Assertion failure in -[UITableView _updateWithItems:updateSupport:],
 /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UITableView.m:3149
 Missing cell for newly visible row 2
 (null)
Run Code Online (Sandbox Code Playgroud)

cellForRowAt的代码

if isMultipe{
   let cell =  tableView.dequeueReusableCell(withIdentifier: DetailsTableViewCell.defaultIdentifier, for: indexPath) as! DetailsTableViewCell
return cell
    } else {
let cell =  tableView.dequeueReusableCell(withIdentifier: DetailsMultipleTableViewCell.defaultIdentifier, for: indexPath) as! DetailsMultipleTableViewCell
   return cell
}
Run Code Online (Sandbox Code Playgroud)

这里报告了同样的错误:https://forums.developer.apple.com/thread/49676

emr*_*kyv 7

我有同样的问题,我发现UITableView当节标题是可变高度时,动画插入/更新/删除行有严重问题.只需将高度转换为某个常量并再次尝试.

这实际上意味着删除estimatedSectionHeaderHeight.

  • 看起来,即使没有`estimatedSectionHeaderHeight`,你仍然可以获得新的可见行##`的缺失单元格 (2认同)

Vla*_*rin 0

删除tableView.dequeueReusableCell中的indexPath

if isMultipe{
   let cell =  tableView.dequeueReusableCell(withIdentifier: DetailsTableViewCell.defaultIdentifier) as! DetailsTableViewCell
return cell
    } else {
let cell =  tableView.dequeueReusableCell(withIdentifier: DetailsMultipleTableViewCell.defaultIdentifier) as! DetailsMultipleTableViewCell
   return cell
}
Run Code Online (Sandbox Code Playgroud)