在endUpdates之后,单元格未从UITableView中删除,直到reloadData

时间:2016-04-27 19:09:10

标签: ios objective-c uitableview

我遇到了相当神秘的故障: 调用endUpdates后,所有已删除的更新单元格将被隐藏,新单元格将被创建,而不会重用现有单元格。 通常甚至不会调用-tableView:didEndDisplayingCell:forRowAtIndexPath:,但并非总是如此。

结果如下所示:

enter image description here

我对此行为的原因一无所知,并会对如何调试和解决此问题表示感谢。

不幸的是,源代码非常复杂,而且我无法提取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

0 个答案:

没有答案