gpt4 book ai didi

iphone - 从 iphone 中的 sqlite 和 table View 中删除数据

转载 作者:行者123 更新时间:2023-12-03 18:18:29 27 4
gpt4 key购买 nike

我正在尝试从 sqlite .data 中删除数据,我将从下到上删除数据,但随机删除数据从一行详细信息滑到另一行的数据,请帮助我删除数据。

这是我的代码

appdelegate.m

-(void)deleteData:(NSString *)str:(NSString *)string
{
NSLog(@"intIndexpath:--> %d",intIndexpath);

[self createEditableCopyOfDatabaseIfNeeded];

sqlite3_stmt *deleteStatement = nil;

NSString *sql;

int returnvalue;

sql = [NSString stringWithFormat:@"DELETE FROM UserInfo_1 WHERE rowid=%d",intIndexpath+1];

returnvalue = sqlite3_prepare_v2(database, [sql UTF8String], -1, &deleteStatement, NULL);

if (returnvalue == 1)
{
NSAssert1 (0,@"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}

sqlite3_bind_text(deleteStatement, 1,[strAcountName UTF8String], -1, SQLITE_TRANSIENT);

if (SQLITE_DONE!= sqlite3_step(deleteStatement))
{
NSAssert1(0, @"Error while deleteing data. '%s'", sqlite3_errmsg(database));
}

if (sqlite3_prepare(database, [sql UTF8String], -1, &deleteStatement, NULL) == SQLITE_OK)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Delete" message:@"Record Deleted" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];

alert=nil;

}
else
sqlite3_reset(deleteStatement);

sqlite3_finalize(deleteStatement);
deleteStatement = NULL;
}

表格 View .m
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
apd.intIndexpath = indexPath.row;

[apd deleteData:[apd.ArrAcName objectAtIndex:indexPath.row] :apd.strAcountName];
[apd.ArrAcName removeObjectAtIndex:indexPath.row];

apd =(PasswordAppDelegate *)[[UIApplication sharedApplication]delegate];

// NSLog(@"apd.strAcountName is:--> %@",apd.strAcountName);

// [apd deleteData:apd.strAcountName];

self.navigationItem.title =@"Details";

[tableView reloadData];
}
}

最佳答案

几个 react :

  • 看起来您正在使用 rowid好像它是一个行号。它不是。它是唯一的行标识符,无论您添加还是删除其他行,对于给定行都不会更改。因此,如果您有五行(rowid 从 1 到 5)并删除第一行,那么 rowid因为后面的四条记录不会改变(在删除 rowid 的行后,它们将保持 2、3、4 和 5)。如果您有“随机”删除的记录,我想知道您是否正在抓取 row来自您的indexPath 的号码并假设这将对应于表 rowid值,它不会在您从表中删除一条记录后。
    您想要做的是,当您从数据库中读取数据时,还要读取并保存相应的 rowid ,也是(或者更好的是,如果您的表有主键,请使用它)。然后,当去删除一行时,你不应该只使用 rowid等于您的indexPath.row ,而是您应该获取唯一的 rowid (或主键)您保存在与当前 indexPath.row 对应的开头弄清楚如何删除有问题的行。
  • 不相关,但您似乎不需要做任何 sqlite3_bind .您似乎没有任何需要绑定(bind)的参数。
  • 也无关,但在您的 sqlite3_step 之后,然后你正在做另一个 sqlite3_prepare ,这没有意义。如果 sqlite3_step成功了,你可以sqlite3_finalize并退出。
  • 顺便说一句,您可能需要考虑使用 Objective-C 包装器,例如出色的 FMDB .它确实简化了 SQLite 编程过程。
  • 关于iphone - 从 iphone 中的 sqlite 和 table View 中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951093/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com