【问题标题】:sqlite3_prepare_v2 exc_bad_access in iOS 10iOS 10 中的 sqlite3_prepare_v2 exc_bad_access
【发布时间】:2017-02-16 09:17:20
【问题描述】:

我在我的 iOS 项目中使用 sqlite 作为数据库。在 iOS 9 中,一切都运行良好。现在我已经更新了新的 Xcode。但是应用程序在 'sqlite3_prepare_v2' 处多次崩溃。

另外,我不会超时关闭数据库。并且只打开一次。 我在下面的代码 b'acs 中添加了 DB open 在调试中我关闭了 DB。但还是崩溃了。

crash

谁能帮帮我?

提前致谢

【问题讨论】:

  • 我也面临同样的问题,如果有人遇到同样的问题,请帮忙。任何帮助都将不胜感激。
  • 我从中看到的唯一提示是“address=0x0”。检查您传递给调用的值,以确保它们不会意外地为 nil。
  • 我没有传递任何 nil 值。应用程序在执行 'sqlite3_prepare_v2' 时崩溃。
  • 上述崩溃的任何更新??? @菲利普米尔斯
  • 没有。它说它的地址为 0,而你说你没有传递任何类似的东西。我没有看到任何其他有用的信息。

标签: ios xcode sqlite ios10


【解决方案1】:

我认为问题在第 2592 行。

将 key 传递给 sqlite3_key(...) 时不要将其视为字符串 不确定如何生成密钥,但如果第一个字节设置为 '\0' 然后 strlen 返回 0 (如果你使用一些基于 NSData 随机字节的自动生成的帮助器,这可能会经常发生)

sqlite3_key 定义:

SQLITE_API int SQLITE_STDCALL sqlite3_key(sqlite3 *db, const void *pKey, int nKey)

它期望 nKey 字节也允许“\0”

改为尝试:

 NSData *passBytes = [g_sqlite_key dataUsingEncoding:NSUTF8StringEncoding];
 int status = sqlite3_key(contactDB, passBytes.bytes, passBytes.length);
 if (status != SQLITE_OK) {
      // handle error and return
 }
 // continue...

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2014-07-23
    • 2020-08-17
    • 2012-04-23
    相关资源
    最近更新 更多