我有一个基于tableview的应用程序。在详细信息视图中,有一个“保存到收藏夹”的选项。此选项获取项目并通过单击“收藏夹”按钮将其复制到名为“收藏夹”的视图控制器。
sqlite3 *database;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"database.sqlite"];
NSString *nameOfItem = itemDetail.itemName;
if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK)
{
sqlite3_stmt *compiledStmt;
NSString *sqlStmt=[NSString stringWithFormat:@"UPDATE items SET favorites='YES' WHERE item='%@'", nameOfItem];[paths objectAtIndex:0];
if(sqlite3_prepare_v2(database, [sqlStmt UTF8String],-1,&compiledStmt, NULL)==SQLITE_OK)
{
NSLog(@"Successful update");
}
char* errmsg;
sqlite3_exec(database, "COMMIT", NULL, NULL, &errmsg);
sqlite3_step(compiledStmt);
sqlite3_close(database);
}
}
这是按预期工作的。基本上,sqlite调用将列标志更新为yes,以便它显示在FavoritesViewController中。
我的问题出在FavoritesViewController中。我想选择从收藏夹中删除项目。我想我只是将sqlite查询从'YES'更改为'NO'。所以,我继续把查询放在:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
if ([favoriteSchools count] >= 1) {
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[favoriteSchools removeObjectAtIndex:[indexPath row]];
//
sqlite3 *database;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"database.sqlite"];
NSString *nameOfItem = itemDetail.itemName;
if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK)
{
sqlite3_stmt *compiledStmt;
NSString *sqlStmt=[NSString stringWithFormat:@"UPDATE items SET favorites='NO' WHERE item='%@'", nameOfItem]; [paths objectAtIndex:0];
if(sqlite3_prepare_v2(database, [sqlStmt UTF8String],-1,&compiledStmt, NULL)==SQLITE_OK)
{
NSLog(@"Successful update");
}
char* errmsg;
sqlite3_exec(database, "COMMIT", NULL, NULL, &errmsg);
sqlite3_step(compiledStmt);
sqlite3_close(database);
[tableView endUpdates];
}
}
显然,动画片段有效并将使用删除操作从视图中删除记录。但是,当我再次出门时,之前删除的项目再次出现。我通过用真实的项目名称替换'%@'来验证sqlite实际上正在做它应该做的事情。通过这样做,它相应地更新数据库,当外出和返回应用程序时,项目不会出现(当此视图打开时,有一个查询正在运行,以查找标志设置为yes的所有项目。)
我的问题......是否与正在定义的变量有关,或者它与不了解删除的实际行并将其与记录相关联有什么关系?
我感谢任何建议!
谢谢!