我正在尝试从数据库中删除表视图的didSelectRowAtIndexPath方法上的数据,但不会删除数据。有时记录被删除,但有时未被删除。 显示旧数据。
const char *dbpath = [databasePath UTF8String];
if(sqlite3_open(dbpath, & contactDB) == SQLITE_OK)
{
NSString *deleteSQL = [NSString stringWithFormat:@"delete from userDetails where name = '%@'", _name.text];
NSLog(@"%@:", deleteSQL);
const char *delete_stmt = [deleteSQL UTF8String];
sqlite3_prepare_v2( contactDB, delete_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
_dbStatus.text = @"record is deleted";
} else {
_dbStatus.text = @"record not deleted";
NSLog(@"Error: %s", sqlite3_errmsg(contactDB));
}
sqlite3_close(contactDB);
}
[tableview reloadData];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[resultentArray removeObjectAtIndex:indexPath.row];
NSString *selectedRow1 = [[resultentArray objectAtIndex:indexPath.row]valueForKey:@"name"];
}
答案 0 :(得分:0)
您没有显示如何调用从数据库中删除的方法,或者_name.text
的来源,但是我的初衷是要在数据模型数组之前删除目标行。使用它:
[resultentArray removeObjectAtIndex:indexPath.row];
NSString *selectedRow1 = [[resultentArray objectAtIndex:indexPath.row]valueForKey:@"name"];
这将导致selectedRow1是目标行之后 next 索引处的对象。如果您尝试删除最后一行,那么我认为这将导致索引超出范围错误。
尝试将这两个顺序颠倒(获取目标行然后将其删除),看看是否有任何区别。如果它没有解决您的问题,则将有关如何调用从数据库中删除的方法以及如何设置_name.text
的问题附加一些代码。
NSString *selectedRow1 = [[resultentArray objectAtIndex:indexPath.row]valueForKey:@"name"];
[resultentArray removeObjectAtIndex:indexPath.row];