Удаление строк вручную из UITableView в Xcode 6

У меня есть следующий код, написанный для моей кнопки удаления, чтобы удалить выбранные строки из UITableView.

-(IBAction)deleteItems:(id)sender {

 NSArray *selectedCells = [self.autoCompleteView indexPathsForSelectedRows];
NSMutableIndexSet *indicesToDelete = [[NSMutableIndexSet alloc] init];
for (NSIndexPath *indexPath in selectedCells) {
    [indicesToDelete addIndex:indexPath.row];
}
//arrayFromPlist is NSMutableArray
[autoCompleteView beginUpdates];
[autoCompleteView deleteRowsAtIndexPaths:selectedCells withRowAnimation:UITableViewRowAnimationAutomatic];
[autoCompleteView endUpdates];
[selectedObjects removeObjectsAtIndexes:indicesToDelete];
[autoCompleteView reloadData];

[alertMsg deleteConfirmation:@"Do you want to delete these items?"];

}

Пожалуйста, проверьте изображение моего UITableView и кнопку удаления. Я сохранил свойство Editing моего UITableview для множественного выбора во время редактирования в раскадровке.

введите описание изображения здесь

Когда я нажимаю кнопку «Удалить», показанную на экране, я получаю следующую ошибку.

Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (5), должно быть равно количеству строк. содержащиеся в этом разделе до обновления (5), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 2 удалено) и плюс или минус количество строк, перемещенных в этот раздел или из него (0 перемещено в , 0 съехала).

Не уверен, в чем моя ошибка в коде кнопки удаления.


person TheGaME    schedule 04.11.2015    source источник


Ответы (1)


Одна определенная проблема заключается в том, что вы удаляете ячейки до того, как удалите соответствующие данные из модели. Это неверно. Всегда меняйте модель в первую очередь; затем измените ячейки таким образом, чтобы они соответствовали модели.

person matt    schedule 04.11.2015
comment
@matt ... Я помещаю [selectedObjects removeObjectsAtIndexes: indexToDelete]; ниже BeginUpdates, но по-прежнему получаю ту же ошибку, что и в вопросе. - person TheGaME; 04.11.2015
comment
Я не знаю, что такое selectedObjects и как поддерживается ваша модель. Но вы должны удалить строки из модели, прежде чем начинать beginUpdates. - person matt; 04.11.2015
comment
У меня есть 2 изменяемых массива: selectedObjects будет содержать элементы для удаления, а autoCompleteData содержит исходные данные, которые будут отображаться в табличном представлении. - person TheGaME; 04.11.2015
comment
@ matt .. Понял. небольшая ошибка, которую я сделал. Я изменил selectedObjects на autocompleteData. это сработало. - person TheGaME; 04.11.2015
comment
Тогда вам нужно изменить autoCompleteData. Если это источник данных в вашем cellForRowAtIndexPath, вы должны изменить его сейчас, и вы должны изменить его сначала. Вот пример работающего кода: Посмотрите, как я полностью модифицирую модель перед удалением каких-либо строк в табличном представлении. - person matt; 04.11.2015
comment
@ matt..Если мой tableview всегда содержит только 1 раздел, то в методе numberofSections я могу вернуть 1. - person TheGaME; 04.11.2015