Каков наилучший способ обеспечить перезагрузку UITableView атомарно?
v получил UITableView, источник данных которого обновлялся через случайные интервалы за очень короткий период времени. По мере обнаружения новых объектов они добавляются в tableView 's источник данных, и я вставляю конкретный indexPath:
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
Источник данных находится в классе менеджера, и при его изменении публикуется уведомление.
- (void)addObjectToDataSource:(NSObject*)object {
[self.dataSource addObject:object];
[[NSNotificationCenter defaultCenter] postNotification:@"dataSourceUpdate" object:nil];
}
ViewController обновляет tableView, когда получает это уведомление.
- (void)handleDataSourceUpdate:(NSNotification*)notification {
NSObject *object = notification.userInfo[@"object"];
NSIndexPath *indexPath = [self indexPathForObject:object];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
}
Это работает нормально, но я заметил, что в некоторых случаях второй объект обнаруживается так же, как первый вызывает endUpdates, и я получаю исключение, утверждающее, что у меня есть два объекта в моем источнике данных, когда tableView ожидал одного.
Мне было интересно, если кто-нибудь нашел лучший способатомарно вставьте строки в tableView. Я думал поставить@synchronized (self.tableView) блок вокруг обновления, но яЯ хотел бы избежать этого, если это возможно, потому что это дорого.