0

UITableView的文档reloadData说(http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html):“它不应该在插入或删除的方法中调用rows,尤其是在通过调用 beginUpdates 和 endUpdates 实现的动画块中”。

我的问题是,为什么?(尤其是第一部分,斜体)。

我正在阅读一本书,它实现了向 UITableView 添加项目,如下所示:

// Add new item to the table
- (IBAction)addNewItem:(id)sender
{
    // Update the model, add a new item
    BNRItem *newItem = [[BNRItemStore sharedStore] createItem];

    // Figure out where that item is in the array
    int lastRow = [[[BNRItemStore sharedStore] allItems] indexOfObject:newItem];

    // Create the corresponding index path
    NSIndexPath *ip = [NSIndexPath indexPathForRow:lastRow inSection:0];

    // Insert this new row into the table
    [[self tableView] insertRowsAtIndexPaths:[NSArray arrayWithObject:ip]
                            withRowAnimation:UITableViewRowAnimationTop];
}

而同样可以这样实现:

// Add new item to the table
- (IBAction)addNewItem:(id)sender
{
    // Update the model, add a new item
    [[BNRItemStore sharedStore] createItem];

    [[self tableView] reloadData];
}
4

1 回答 1

1

通过重新加载数据,您将强制重新创建所有行,因此当您获得新信息时,告诉表视图必须添加/删除哪些内容会更加高效,尤其是当您添加一行时结束并且该部分当前不在屏幕上(因此不必重新渲染视图,只需重新计算滚动高度)。

于 2013-07-31T09:17:22.950 回答