2

此代码片段来自 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)。

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 感到困惑。

4

1 回答 1

1

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

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

感谢您的建议,因为他们让我更深入地挖掘并意识到编译器正在考虑将 sqlite3 视为一个类,而实际上它不是。

于 2012-09-25T14:55:03.867 回答