obCc_storeStrong中的xCode 4.5 sqlite3_open EXC_BAD_ACCESS

时间:2012-09-24 19:07:20

标签: objective-c xcode

此代码段来自当前位于应用商店中的iPad应用,并使用ARC编写。该代码使用xCode 4.4.1(4F1003)开发,并在IOS Simulator 5.1(272.21)中正常运行。我最近安装了xCode 4.5和IOS Simulator 6.0,当sqlite3_open返回到我的目标C代码时,我现在得到EXC_BAD_ACCESS(代码= 2,地址= 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甚至参与其中。

1 个答案:

答案 0 :(得分:1)

我将问题跟踪到包含文件中的前向声明: @class sqlite3; 这显然是错误的,因为sqlite3是一个结构。这导致ARC尝试引用计数,这就是引发异常的原因。

删除行会导致编译错误,这可以通过在sqlite3前加上关键字“struct”前缀来轻松解决。

感谢您的建议,因为他们让我深入挖掘并意识到编译器正在考虑将sqlite3作为一个类,而实际上并非如此。