Jaki jest najlepszy sposób zapewnienia przeładowania UITableView w sposób atomowy?

I'v dostał UITableView, którego źródło danych zostało zaktualizowane w losowych odstępach czasu w bardzo krótkim czasie. W miarę odkrywania kolejnych obiektów są one dodawane do źródła danych tableView i wstawiam konkretny indexPath:

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];

Źródło danych znajduje się w klasie menedżera, a powiadomienie jest publikowane po jego zmianie.

- (void)addObjectToDataSource:(NSObject*)object {
    [self.dataSource addObject:object];
    [[NSNotificationCenter defaultCenter] postNotification:@"dataSourceUpdate" object:nil];
}

ViewController aktualizuje tableView, gdy otrzyma to powiadomienie.

- (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];
}

Działa to dobrze, ale zauważyłem, że w niektórych przypadkach drugi obiekt jest wykrywany, tak jak pierwszy wywołuje endUpdates, a ja otrzymuję wyjątek twierdzący, że mam dwa obiekty w moim źródle danych, gdy tableView oczekiwał jednego.

Zastanawiałem się, czy ktoś nie znalazł lepszego sposobuatomowo wstaw wiersze do widoku tabeli. Myślałem o wprowadzeniu@synchronized (self.tableView) zablokuj aktualizację, ale chciałbym tego uniknąć, jeśli to możliwe, ponieważ jest to kosztowne.

questionAnswers(1)

yourAnswerToTheQuestion