исключение при удалении ячейки - PullRequest
0 голосов
/ 31 января 2012

Я дал 2 цвета для своей ячейки.

cell.contentView.backgroundColor = indexPath.row % 2 ? [UIColor whiteColor] : [UIColor blackColor] ;

Теперь, когда я удаляю строку, скажем, я удалил ячейку, которая содержит черный цвет, тогда будет2 ряда, которые содержат белый цвет.Поэтому я попытался обновить строку;

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];

Это работает, но когда я удаляю все записи, я получаю следующее исключение;Почему это так?

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:961 and

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. Attempt to delete more rows than exist in section.'

мой код;

[self.tableView beginUpdates];
[self.myArray removeObjectsInArray:discardedItems ]; 
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];     
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];  
[self.tableView endUpdates];

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 31 января 2012

Хорошо, давайте подумаем, что у вас есть 6 объектов в вашем массиве, каждый из которых соответствует источнику данных для каждой ячейки. Итак, методы делегата вызываются, и вы можете отредактировать строку и удалить ее, так что теперь у вас будет 5 объектов. То, что я всегда делаю и работает как шарм, - это сначала изменение размера массива с источником данных, а затем обновление представления.

//Remove the data    
[self.myArray removeObjectsInArray:discardedItems ]; 
//Update the view
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];     
[self.tableView endUpdates];

Если вам не нужно перезагружать данные, что означает, что некоторые источники данных изменились, вам, вероятно, не следует вызывать метод обновления. Вероятно, возникло исключение, потому что вы пытались извлечь информацию из шестого элемента массива еще до того, как вы закончили обновление UITableView.

Надеюсь, это сработает.

0 голосов
/ 31 января 2012

Он думает, что у вас больше строк, чем у вас.Попробуйте что-то вроде этого ...

[self.tableView beginUpdates];
[self.myArray removeObjectsInArray:discardedItems ]; 
[self.tableView reloadData];
[self.tableView endUpdates];

Из-за характера делегата данных tableview, как только вы измените модель данных, остальные должны следовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...