Разрывая мои волосы, пытаясь заставить это работать. Я хочу выполнить [self.tableView deleteRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationLeft];
,
Более подробный код, как я удаляю:
int index = (int)[self.messages indexOfObject:self.messageToDelete];
[self.messages removeObject:self.messageToDelete];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
NSArray *indexes = [[NSArray alloc] initWithObjects:indexPath, nil];
[self.tableView deleteRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationLeft];
Это прекрасно работает, если я получаю push-уведомление (то есть новое сообщение, полученное), в то время как удаление приложения приведет к сбою и отображению ошибки, например:
Ошибка подтверждения в - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit -3347.44/UITableView.m:1327 2015-07-04 19: 12: 48.623 myapp [319: 24083] *** Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: 'попытка удалить строку 1 из раздела 0, которая содержит только 1 строку перед обновлением '
Я подозреваю, что это связано с тем, что меняет источник данных, размер массива, который
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
ссылки при удалении не будут согласованы, потому что они были увеличены на единицу, когда push-уведомление вызвало обновление. Есть ли способ обойти это? Правильно ли, что deleteRowsAtIndexPaths
использует метод numberOfRowsInSection
?