delete一个的UITableView行错误(UITableView Deleteing row

2019-11-05 03:21发布

我是一个新手,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中的commitediting风格

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

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

有人能告诉我什么,我做错了。 从我的理解中行的部分数量不会被更新。 我对吗 ??

提前致谢。

Answer 1:

由于苹果的表视图编程指南适用于iOS中规定的删除次序是相关的:

首先从表中删除的项目; 从模型第二删除。

所以,你必须切换两个删除命令:


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


Answer 2:

在我微薄的意见,并试图以同样的事情后,看起来像表依然认为行没有改变的数量,所以我让行隐藏的,看起来像它为我工作。



Answer 3:

一些重新看代码后,想出解决自己。 问题是用的

readTable()

其中旧阵列再未读之前清空。 我用

[list removeAllObjects]

方法将其清空。 它的工作最后。 :)



Answer 4:

我没有看到一个表reloadData]; 它的工作原理? 通常它是必需的。



文章来源: UITableView Deleteing row error