xCode 4.5 sqlite3_open EXC_BAD_ACCESS in objc_storeStrong
此代码片段来自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(code = 2,address = 0x200)。xCode 4.5 sqlite3_open EXC_BAD_ACCESS in objc_storeStrong
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甚至涉及。
我把这个问题追踪到包含文件中的前向声明: @class sqlite3; 这显然是错误的,因为sqlite3是一个结构。这导致ARC尝试引用计数它是什么引发异常。
删除行会导致编译错误,这些错误通过在关键字“struct”前加sqlite3的前缀很容易解决。
感谢您的建议,因为他们让我深入挖掘并意识到编译器正在考虑将sqlite3作为一个类,但实际上并非如此。
什么是班级名称? – nemesis
'sqlStatement'的价值是什么?什么是完整的调用堆栈?什么是'objc_storeString'的参数? –
打开僵尸,看看它是否捕捉任何东西。 – bbum