UITableView Ошибка удаления строки - PullRequest
0 голосов
/ 06 марта 2011

Я новичок в разработке приложений для iPhone. Поэтому, пожалуйста, будьте спокойны со мной:)

Я пытался реализовать удаление строки из UItableView, когда получаю эту ошибку, которую я не могу понять, почему

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

Вот мой код для удаления метода элемента

-(void)deleteItem:(NSIndexPath *)path{
Item *i = (Item *)[list objectAtIndex:path.row];
NSLog(@"Deleting item [%@]", i.iName);
int ret;

const char *sql = "delete from items where id = ?;";
if (!deleteStmt)
{ // build update statement
    if ((ret=sqlite3_prepare_v2(db, sql, -1, &deleteStmt, NULL))!=SQLITE_OK)
    {
        NSAssert1(0, @"Error building statement to delete items [%s]", sqlite3_errmsg(db));
    }
}

// bind values to statement
NSInteger n = i.iId;
sqlite3_bind_int(deleteStmt, 1, n);
// now execute sql statement
if ((ret=sqlite3_step(deleteStmt)) != SQLITE_DONE)
{
    NSAssert1(0, @"Error deleting item [%s]", sqlite3_errmsg(db));
}

// now reset bound statement to original state
sqlite3_reset(deleteStmt);

[list removeObjectAtIndex:path.row]; // remove from table
[self readTable]; // refresh array

}

и это стиль коммитинга UITableView

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {
    [appDelegate deleteItem:indexPath];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  }      
}

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно. Из того, что я понимаю, количество строк в разделе не обновляется. Я прав ?? 1014 *

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 06 марта 2011

Как указано в Руководстве по программированию Apple Table View для iOS, порядок удаления имеет отношение:

сначала удалите элемент из таблицы;во-вторых, удалите его из модели.

Таким образом, вы должны переключить две команды удаления:


[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[appDelegate deleteItem:indexPath];
0 голосов
/ 22 января 2012

Я не вижу [таблица reloadData];это работает?Обычно это требуется.

0 голосов
/ 07 марта 2011

После некоторого пересмотра кода сам разобрался с решением. Проблема была с

readTable()

где старый массив не был очищен перед повторным чтением. Я использовал

[list removeAllObjects]

метод, чтобы очистить его. Это сработало наконец. :)

0 голосов
/ 06 марта 2011

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

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