简体   繁体   English

iOS 10中的sqlite3_prepare_v2 exc_bad_access

[英]sqlite3_prepare_v2 exc_bad_access in iOS 10

I have use sqlite in my iOS project for database. 我在iOS项目中使用sqlite作为数据库。 In iOS 9 all things are working perfectly. 在iOS 9中,所有东西都运行得很好。 Now i have update new Xcode. 现在我更新了新的Xcode。 But app is crashes many times at 'sqlite3_prepare_v2'. 但是应用程序在'sqlite3_prepare_v2'上多次崩溃。

Also, i am not closing database overtime. 此外,我不是关闭数据库加班。 And open it only once. 并且只打开一次。 I have added DB open in below code b'acs in debug i got DB close. 我已经在下面的代码中添加了DB open在调试中的b'acs我得到了DB关闭。 But still got crash. 但仍然崩溃了。

crash 紧急

Can anyone help me ? 谁能帮我 ?

Thanks in advance 提前致谢

I think issue is in line 2592. 我认为问题在第2592行。

Do not treat key as string when passing it to sqlite3_key(...) Not sure how you generate key but if first byte is set '\\0' then strlen return 0 (which may happen pretty often if you use some autogenerated helper based on NSData random bytes) 在将密钥传递给sqlite3_key时不要将密钥视为字符串(...)不确定如何生成密钥但如果第一个字节设置为'\\ 0'则strlen返回0(如果使用某些自动生成的帮助程序,则可能会经常发生NSData随机字节)

sqlite3_key definition: sqlite3_key定义:

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

It expects nKey bytes where "\\0" is allowed too 它期望nKey字节也允许“\\ 0”

Instead try: 而是尝试:

 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...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM