0

iPhoneアプリ開発初心者です。iPhoneで通話履歴アプリを開発しています。このアプリケーションでは、通話履歴データベースを使用してすべての通話の詳細を取得し、テーブル ビューで表示しています。ここで、データベース内の選択された行の呼び出し履歴値に対して削除を実行したいと考えています。この操作の実行方法がわかりません。次のコードを使用していますが、次のようなエラーが表示されます。

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'delete ステートメントの作成中にエラーが発生しました。「"<" 付近: 構文エラー」

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

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        [appDelegate.displayHistroryValueAppDelegate removeObjectAtIndex:indexPath.row];
        [displayTableView reloadData];
        int rowId = [[[appDelegate.displayHistroryValueAppDelegate objectAtIndex:indexPath.row]valueForKey:@"ROWID"] intValue];
        NSLog(@"rowidvalue: %d", rowId);

        NSString *databasePath =@"/private/var/wireless/Library/CallHistory/call_history.db";

       // NSString *sqlStatement = [NSString stringWithFormat:@"DELETE FROM calls WHERE ROWID = %d",rowId];
       // NSLog(@"DELETE statement: %@", sqlStatement);
        sqlite3 *database;

        if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

            //const char *sql = "delete from reminders where ID = ?";
           //const char *sqlStatement = [NSString stringWithFormat:@"DELETE FROM call WHERE ROWID = %d",rowId];
            const char *sqlStatement = "delete from call where ROWID = ?";
            sqlite3_stmt *deletestmt;
            if(sqlite3_prepare_v2(database, sqlStatement, -1, &deletestmt, NULL) != SQLITE_OK) 
            {
                NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(database));
            }



           // sqlite3_bind_int(deletestmt, 1, [IdValue intValue]);

             sqlite3_bind_int(deletestmt, 1, rowId);

            if (SQLITE_DONE != sqlite3_step(deletestmt)) 
                NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database));


            sqlite3_reset(deletestmt);
        }
    }
}

私を助けてください

4

2 に答える 2

0

SDK には、iPhone の通話履歴にアクセスするための API はありません。通話履歴にアクセスできる読み取り専用の SQLite データベースがあります。このリンクを参照してください。

于 2012-06-06T09:55:19.123 に答える
0

これは、iPhone で履歴を削除するための一時的な修正にすぎないことを認識しています。携帯電話を使用すると、同じタイプのデータが再び蓄積され、削除するには新しいものとしてもう一度復元する必要があります.

新品として復元する場合は、iPhone Data Eraser の終了時に同期して、データを復元します。したがって、これを行うことにした場合は、このルートをたどる前に、すべてのデータがコンピューター上にあることを確認してください。新品同様に復元すると、最初に箱から取り出したときと同じ状態に電話機が戻ります。

于 2014-01-27T03:41:18.450 に答える