6

正如Apple Doc所说,

重新加载一行会导致表视图向其数据源询问该行的新单元格。

我将 UITableView 与 NSFetchedResultsController 结合起来:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
    if (self.tableView.isEditing) 
    {
        [self.tableView setEditing:NO animated:YES];
    }
    [self.tableView beginUpdates];
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView endUpdates];

    [self updateTabItemBadge];
    [self.noDataView setHidden:![self isNoData]];

    WXINFO(@"controllerDidChangeContent");
}

在上述两个函数之间,我重新加载了目标单元格:

在此处输入图像描述

    case NSFetchedResultsChangeUpdate: {
        if (indexPath) {
            [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        }

在此处输入图像描述

我在 Line1563 设置了一个断点,以检查reloadRowsAtIndexPaths是否已调用,但在那之后,- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath没有调用。

所以,我的手机无法更新。

有人可以告诉我为什么吗?谢谢。

4

4 回答 4

1

把它包起来:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
于 2013-07-03T05:29:41.890 回答
0

我发现这样做的唯一可靠方法是使用动画以外的动画。如果指定了任何其他动画,则重新加载正确发生。

于 2014-11-03T20:22:08.880 回答
0

您能否通过使用 [tableView reloadData] 重新加载 tableview 来检查?

如果您只想更新一行而不重新加载表格,请检查“indexPath”类型。它应该是 NSIndexPath。

于 2013-07-03T04:03:31.747 回答
0

这是我所做的一项工作,但它确实完成了工作。

 func tableView(_ tableView: UITableView, commit editingStyle:
    UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == UITableViewCellEditingStyle.delete {
            if itemDetailDict.count - 1 <= 0 {
                self.mainTable.beginUpdates()
                let cellOne = self.mainTable.cellForRow(at: indexPath)
                cellOne?.textLabel?.text = "There are no items."
                self.mainTable.reloadRows(at: [indexPath], with: .automatic)
                self.mainTable.endUpdates()
            } else {
                self.mainTable.beginUpdates()
                let removeKey = Array(itemDetailDict.keys)[indexPath.row]
                itemDetailDict.removeValue(forKey: removeKey)
                mainTable.deleteRows(at: [indexPath], with: .automatic)
                self.mainTable.endUpdates()
            }
        }
    }

本质上,在删除行功能上,我希望用户能够删除该行,但是当只剩下一行时,我想在表格视图的单元格中显示一条默认消息。

为此,我更新了数据源,当字典中没有更多数据时,我更新单元格以显示文本,重新加载单元格,然后在我的 tableview 上调用 endUpdating。

我希望这有帮助。

于 2017-01-09T15:56:18.657 回答