Ошибка при удалении строки из таблицы

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

У меня очень странная ошибка, которая возникает, когда я пытаюсь удалить строку из своей таблицы. Ошибка, которую я получаю,:

Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (2) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).

Я читал, что обычно это ошибка, когда кто-то не удаляет объект из своего источника данных перед вызовом deleteRowsAtIndexPaths . Тем не менее, я делаю это… Вот мой код:

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
         /* Remove from DB */
        [dbHandler deleteRow:indexPath];
        /* Removing row from data source */
        [[self.listData objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];
        /* Remove row from table - It fails on this line... */
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationTop];
     }
}
 

Когда я выполняю это в отладчике, он, безусловно, удаляет этот объект из источника данных. Есть ли что-то еще, что мне нужно делать?

Комментарии:

1. Вы уверены, что ваш dbHandler не обновляет ваши listData и наоборот?

2. вполне уверен.. он выполняет только прямой запрос к БД для удаления результирующей строки в БД. Я также прошел через это в отладчике. Он успешно удаляет строку из источника данных прямо перед вызовом deleteRowsAtIndexPaths, и количество listData соответствует ожидаемому.

3. Проверьте, что возвращает ваш метод numberOfRowsInSection непосредственно перед вызовом метода [TableView deleteRowsAtIndexPaths]. Лично я довольно часто забываю обновлять структуры данных источника данных после обновления базы данных.

Ответ №1:

Я понял это… Я добавлял дополнительную строку в свою таблицу, когда загружалось больше строк, чем уже отображалось на экране. Аналогично тому, как приложение Mail выполняет функцию «Загрузить больше»… Я не учитывал эту дополнительную ячейку, когда удалял их.