我遇到了相当神秘的故障:
调用endUpdates
后,所有已删除的更新单元格将被隐藏,新单元格将被创建,而不会重用现有单元格。
通常甚至不会调用-tableView:didEndDisplayingCell:forRowAtIndexPath:
,但并非总是如此。
结果如下所示:
我对此行为的原因一无所知,并会对如何调试和解决此问题表示感谢。
不幸的是,源代码非常复杂,而且我无法提取intergal。如果你问我相关的代码 - 我会把它复制到那里。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
id item = [self.presenter.mediator itemAtIndexPath:indexPath];
NSString *reuseIdentifier = [self.reuseIdentifierMatcher reuseIdentifierForItem:item];
UITableViewCell<ViewItemProtocol>* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier
forIndexPath:indexPath];
cell.item = item;
return cell;
}
- (void)applyChangesSet:(TableChangesSet*)changes
{
LOG_VALUE(@([[NSThread currentThread] isMainThread]));
[self.tableView beginUpdates];
for (TableChange *change in changes.changes)
{
[self applyChange:change];
}
[self.tableView endUpdates];
}
applyChange
不包含任何UI操作,但deleteRowsAtIndexPaths / insertRowsAtIndexPaths / reloadRowsAtIndexPaths除外;
调试输出为@([[NSThread currentThread] isMainThread]) is 1