私がやろうとしていること
私のアプリでは、いくつかのメソッドを記述した 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;
}