У меня есть ViewController, который создает новый объект, а затем обратно в FirstViewController.m У меня есть метод разматывания, который должен обновлять tableView с помощью строки для нового объекта. Использование метода reloadData не будет работать, поскольку оно перезагружает все ячейки, которые влияют на методы, которые у меня есть в этих ячейках. Я хотел бы просто добавить новую ячейку без перезагрузки всего tableView. Мой размотки метод выглядит следующим образом:Добавить строку в UITableView без использования reloadData
-(IBAction)unwind:(UIStoryboardSegue *)segue {
ABCAddItemViewController *source = [segue sourceViewController];
ABCItem *item = source.object;
if (item != nil) {
[self.objectArray addObject:item];
[self.tableView reloadData];
}
}
Я попытался добавить эти строки вместо [self.tableView reloadData]:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.objectArray indexOfObject:item] inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
Тем не менее, приложение падает, и я получаю это сообщение:
Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк , содержащихся в существующем разделе после обновления (1), должно быть , равное количеству строк, содержащихся в i в этом разделе перед обновлением (1) плюс или минус количество строк, вставленных или удаленных из , этот раздел (1 вставлен, 0 удален) и плюс или минус количество строк , перемещенных в или из этого раздела (0 переместился, 0 выехал).
Число строк в Tableview определяется [self.objectArray count]
в the numberOfRowsInSection:
методом.
Как это сделать? Или есть лучший способ?
Вы должны обновить источник данных ('self.objectArray ') с дополнительными данными непосредственно перед вызовом' insertRowsAtIndexPath'. – rmaddy
Я попытался просто заменить строку '[self.tableView reloadData]', но это вызывает ошибку, о которой я упоминал. Я добавляю объект в массив прямо до этого. – Benck
Призыв к 'reloadData' не даст сообщение об ошибке. Это будет только от вызова 'insertRowsAtIndexPaths:'. BTW - вам нужно вставить строку в том же месте, где вы добавляете ее в свой массив. – rmaddy