簡體   English   中英

關於SQLITE選擇的BAD_ACCESS

[英]BAD_ACCESS on SQLITE selection

當我嘗試使用從iPhone開發中的本地SQLITE數據庫中選擇的值進行任何操作時,我得到EXC_BAD_ACCESS。 我函數的代碼是

-(void) updateFromDB {

// Setup the database object
sqlite3 *database;

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

    NSString *query = [NSString stringWithFormat:@"SELECT MOD_ID FROM MODULE;"];

    //NSLog(@"QUERY: %@",query);

    // Prepare statement
    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) {

        // Execute SQL
        while (sqlite3_step(statement) == SQLITE_ROW) {

            // Get MOD_IDs
            NSInteger MOD_ID = sqlite3_column_int(statement, 0);

            NSString *ID = [NSString stringWithFormat:@"%@",MOD_ID];

            //=======================
            // Get Notice Module Data
            //=======================
            if (MOD_ID == 1) {
                self.noticeModule = [[ModuleSetting alloc] initWithID:ID];
            }




        }

    } else {
        NSAssert1(0,@"Error: failed to prepare statement. '%s'", sqlite3_errmsg(database));
    }

    // Release the compiled statement from memory
    sqlite3_finalize(statement);

} else {
    sqlite3_close(database);
    NSAssert1(0,@"Failed to open database. '%s'",sqlite3_errmsg(database));
}
sqlite3_close(database);

}

錯誤的訪問發生在線路上

NSString *ID = [NSString stringWithFormat:@"%@",MOD_ID];

謝謝你的盡心幫助!

%@表示對象。 但是MOD_ID似乎是一個integer 因此,您的格式應為%d

NSString *ID = [NSString stringWithFormat:@"%d", MOD_ID];

您不能在整數格式字符串中使用%@ ,而只能用於Obj-C對象。 對於整數,請使用%d (或對於NSInteger,我認為建議使用%ld )。

看看《 字符串格式說明符》指南。

MOD_ID不是指針,因此%@是不正確的。

在下面使用

 NSInteger MOD_ID = sqlite3_column_int(statement, 0);
   NSString *ID = [NSString stringWithFormat:@"%d",MOD_ID];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM