0

私がやろうとしていること


私のアプリでは、いくつかのメソッドを記述した SQL-Lite データベースを取得しました。メソッドのコールバックはブール値です。True = データを書き込めました。False = データを書き込めませんでした。コードは X-Code にエラーを表示しないので、正しいはずです。

質問


私のメソッドでは、ブール値を定義して Null に設定します。その後、データをデータベースに書き込むことができるかどうかをチェックし、定義されたブール値を true または false に変更する If-Clause があります。エラーがスローされます:EXC_BAD_ACCESS (code = 2, address = 0x0)

ポイントは、なぜこのエラーが発生するのか理解できないということです。私が間違っていることと、それを解決する方法を教えてください。コードは次の場所にあります。

コード


    - (BOOL *) createLogin:(NSInteger *)user_id
                   usr: (NSString *)username
                   pwd: (NSString *)password
                  date: (NSDate *)last_login{

    BOOL *returnvalue = NULL;

    self.ivo_db = [[ivo_database alloc] init];

    if((sqlite3_open_v2([[ivo_db getWritableDatabase] UTF8String], &sqldb, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK)){

    NSLog(@" %s Couldn't open writable database '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(sqldb), sqlite3_errcode(sqldb));

    }else{
        int userid = *user_id;
        NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO tbl_login (user_id, username, password, last_login) VALUES (%d,'%@','%@','%@')", userid, username, password, last_login];

    const char *putLoginData = [sqlString UTF8String];
    sqlite3_stmt *sqlStatement;

    if(sqlite3_prepare(sqldb, putLoginData, -1, &sqlStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"%s SQLITE_ERROR while preparing Statement '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(sqldb), sqlite3_errcode(sqldb));
        *returnvalue = NO;
    }else{

    sqlite3_step(sqlStatement);
    sqlite3_finalize(sqlStatement);

    int lastInsert = sqlite3_last_insert_rowid(sqldb);
    NSLog(@"lastinsertid:%d", lastInsert);
    sqlite3_close(sqldb);
    *returnvalue = YES;
    }
   }
    return returnvalue;
}
4

2 に答える 2

2
BOOL *returnvalue = NULL;
/* ... */
*returnvalue = YES;

まず、BOOL へのポインターを作成します。指しているアドレスを NULL に設定します。次に、指しているアドレスの値を YES に設定しようとします。

または短い: アドレス 0x00 に書き込もうとします。それはうまくいきません。

BOOL を使用したい。ポインターのないプリミティブ型。

- (BOOL) createLogin:(NSInteger *)user_id
               usr: (NSString *)username
               pwd: (NSString *)password
              date: (NSDate *)last_login{
    BOOL returnValue = NO;
    /* ... */
    returnValue = YES;
    /* ... */
    return returnValue;
}
于 2013-07-23T06:34:57.793 に答える
-1

Bool を Start から False として初期化してみてください。

そして、変数の値を変更するときは、returnvalue = YES; のようにします。

于 2013-07-23T06:35:01.040 に答える