从表和sqlite数据库删除行

问题描述:

我有一些问题,从数据库和表中删除行。从表和sqlite数据库删除行

问题是:我可以滑动行,点击“删除”按钮,但没有任何反应。

也许我做错了。

有人可以给我一个小费? 在这里有所有的程序,如果你想看看:(更新)

http://cl.ly/9q7U

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

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

    NSDictionary *rowVals = (NSDictionary *) [shoppingListItems objectAtIndex:indexPath.row]; 
    NSString *keyValue = (NSString *) [rowVals objectForKey:@"key"]; 

    [_tableView beginUpdates]; 
    [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    //Here i got the SIGABRT error 
    [_tableView endUpdates]; 

    sqlite3 *db; 
    int dbrc; //Codice di ritorno del database (database return code) 
    DatabaseShoppingListAppDelegate *appDelegate = (DatabaseShoppingListAppDelegate*) [UIApplication sharedApplication].delegate; 
    const char *dbFilePathUTF8 = [appDelegate.dbFilePath UTF8String]; 
    dbrc = sqlite3_open(dbFilePathUTF8, &db); 
    if (dbrc) { 
     NSLog(@"Impossibile aprire il Database!"); 
     return; 
    } 

    sqlite3_stmt *dbps; //Istruzione di preparazione del database 

    NSString *deleteStatementsNS = [NSString stringWithFormat: @"DELETE FROM \"shoppinglist\" WHERE key='%@'", keyValue]; 

    const char *deleteStatement = [deleteStatementsNS UTF8String]; 
    dbrc = sqlite3_prepare_v2(db, deleteStatement, -1, &dbps, NULL); 
    dbrc = sqlite3_step(dbps); 


    //faccio pulizia rilasciando i database 
    sqlite3_finalize(dbps); 
    sqlite3_close(db); 

} 
} 

感谢阿克沙伊,最后我固定的代码的这一部分。我在这里给那些需要它的人写解决方案。

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

if (editingStyle == UITableViewCellEditingStyleDelete) { 

    NSDictionary *rowVals = (NSDictionary *) [shoppingListItems objectAtIndex:indexPath.row]; 
    NSString *keyValue = (NSString *) [rowVals objectForKey:@"key"]; 

    [tableView beginUpdates]; 

    sqlite3 *db; 
    int dbrc; //Codice di ritorno del database (database return code) 
    DatabaseShoppingListAppDelegate *appDelegate = (DatabaseShoppingListAppDelegate*) [UIApplication sharedApplication].delegate; 
    const char *dbFilePathUTF8 = [appDelegate.dbFilePath UTF8String]; 
    dbrc = sqlite3_open(dbFilePathUTF8, &db); 
    if (dbrc) { 
     NSLog(@"Impossibile aprire il Database!"); 
     return; 
    } 

    sqlite3_stmt *dbps; //Istruzione di preparazione del database 

    NSString *deleteStatementsNS = [NSString stringWithFormat: @"DELETE FROM \"shoppinglist\" WHERE key='%@'", keyValue]; 

    const char *deleteStatement = [deleteStatementsNS UTF8String]; 
    dbrc = sqlite3_prepare_v2(db, deleteStatement, -1, &dbps, NULL); 
    dbrc = sqlite3_step(dbps); 


    //faccio pulizia rilasciando i database 
    sqlite3_finalize(dbps); 
    sqlite3_close(db); 

    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    [shoppingListItems removeObjectAtIndex:indexPath.row]; 

    [tableView endUpdates]; 

    [tableView reloadData]; 
} 
} 
+0

@Oiproks在提问时,请始终告诉我们您是否有某种错误,或者您有意外的行为,以及期望的行为是什么(这种情况在这种情况下很明显,但可能并不明显一般情况下)。 –

+0

好的,对不起!我解决了这个问题。 – Oiproks

+0

@Oiproks对不起,我的代码在NSString * keyValue =(NSString *)[rowVals objectForKey:@“key”]处崩溃了;请帮助我 –

你应该打电话:

[tableView beginUpdates]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
     withRowAnimation:UITableViewRowAnimationFade]; 
[tableView endUpdates]; 

里面的commitEditingStyle:而不是reloadData。另外,请确保从DB &中删除实体,从numberOfRowsInSection:返回一个较少的实体。

+0

我按照你的说法试过,但是我在“[tableView endUpdates];”上收到SIGABRT,并且我不知道如何返回少一行... :(我不那么熟练...... – Oiproks

+0

你在numberOfRowsInSection返回什么:?如果你在刷卡前有3行并返回3,现在返回2. – Akshay

+0

那里我返回从数据库收取数组shoppingListItems(返回[shoppingListItems计数];)的项目数。我怎么能告诉它数少一个? – Oiproks

我认为这个问题是在这条线

NSString *insertStatementsNS = [NSString stringWithFormat: @"DELETE FROM \"shoppinglist\" WHERE key=?", indexPath]; 

我想你想在insertStatementsNS此:

NSString *insertStatementsNS = [NSString stringWithFormat: @"DELETE FROM \"shoppinglist\" WHERE key=%@", indexPath]; 

NSString *insertStatementsNS = [NSString stringWithFormat: @"DELETE FROM \"shoppinglist\" WHERE key='%@'", indexPath]; 
+0

呃..问题不仅在于!其实我不能看到,如果这是一个工作与否因为我刷卡并删除没有任何反应......可能有其他地方有什么错:S – Oiproks

+0

commitEditingStyle调用? –

+0

放置断点并检查是否调用了'commitEditingStyle:' – Nekto