このコードスニペットは、現在アプリストアにあるiPadアプリからのものであり、ARCを使用して記述されています。コードはxCode4.4.1(4F1003)を使用して開発され、IOS Simulator 5.1(272.21)で正しく実行されます。最近xCode4.5とIOSSimulator6.0をインストールしましたが、sqlite3_openが目的のCコードに戻ると、EXC_BAD_ACCESS(code = 2、address = 0x200)が返されます。
sqlite3 *tempDatabase;
const char *sqlStatement = [s_DBEngineDBName UTF8String];
commandReturn = sqlite3_open(sqlStatement, &tempDatabase); // open main db
if(commandReturn == SQLITE_OK) {
// ...
}
以前に次のコマンドを使用してデータベースを開きましたが、新しい環境でも失敗します。
commandReturn = sqlite3_open([s_DBEngineDBName cStringUsingEncoding:NSStringEncodingConversionAllowLossy], &tempDatabase); // open main db
上で述べたように、SQLiteコードをステップスルーすると、最後のreturnステートメントが実行されるまですべて期待どおりに機能します。objc_storeStrongが関与している理由について私は混乱しています。