Почему происходит ошибка при удалении строки UITableView? - PullRequest
1 голос
/ 06 декабря 2011

Я пытаюсь реализовать стандартное удаление UITableViewCell, используя стандартный стиль управления редактированием, как описано в Руководстве по программированию Apple Table View. Когда следующий код выполняется в методе commitEditingStyle

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

Я получаю следующее сообщение об ошибке

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

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

Вы должны удалить объект, который представляет ячейка, из вашего источника данных, а также удалить ячейку:

[myObjectsArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
2 голосов
/ 06 декабря 2011

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

Вот правильный пример, когда файловая система является вашим источником данных в iOS:

 // Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the row from the data source.
        File *file = (File *)[self.files objectAtIndex:indexPath.row];
        [[NSFileManager defaultManager] removeItemAtPath:file.path error:nil];
        [self.files removeObject:file];
        if (indexPath.row == 0 && [self.files count] == 0) {
            NSInteger sectionIndex = [indexPath indexAtPosition:0];
            [tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
        }else {
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }
        [self setupData];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
    // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...