我正在尝试从数据库中删除数据,但有时会删除数据,而有时不会删除数据

时间:2019-08-16 13:33:25

标签: ios objective-c sqlite

我正在尝试从数据库中删除表视图的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"];
}

1 个答案:

答案 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];