次のコードを使用して SQLite DB に挿入すると、ログに 2 つのクラッシュが表示されます。ほとんどの場合、コードは完全に機能しますが、クラッシュの原因となっている何かが明らかに間違っています。
sqlite3_last_insert_rowid または sqlite3_close のいずれかで EXC_BAD_ACCESS (SMSDatabase への参照を保持しており、シングルトンにあり、割り当てが解除される理由がわからない) および SIGABRT (メモリの問題?) でクラッシュします。
- (NSInteger)query:(NSString *)query {
NSInteger lastRowID = 0;
if (sqlite3_open([self.databasePath UTF8String], &smsDatabase) == SQLITE_OK)
{
sqlite3_stmt *statement = nil;
const char *sql = [query UTF8String];
if (sqlite3_prepare_v2(smsDatabase, sql, -1, &statement, NULL) == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_DONE)
{
lastRowID = sqlite3_last_insert_rowid(smsDatabase);
}
}
sqlite3_finalize(statement);
}
sqlite3_close(smsDatabase);
return lastRowID;
}
どこが間違っていますか?