背景:我一直在关注WWDC 2011 - 208安全iOS应用程序。他们提到了如何使用名为NSFileProtection的文件加密来保护我们的数据。当我发现automatic method mentioned (@38:00) is bugged时,我希望手动方式(@ 37:00)不是。我尝试使用文件保护图像,一切都很好。只有Sqlite我无法创建。
问题:我尝试使用sqlite3_open_v2
创建SQLite3数据库(没有核心数据)并传递SQLITE_OPEN_FILEPROTECTION_COMPLETE
作为第三个参数的标志。它不会返回SQLITE_OK
。
代码:
if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_FILEPROTECTION_COMPLETE, NULL) == SQLITE_OK){
//everything works
}else{
//failed
}
更新
正如borrrden所提到的,两者都导致了以下错误代码:
SQLITE_MISUSE
(图书馆使用不正确)
更新2: borrrden的第二条评论是正确的,指出需要两个标志。它遵循以下代码:
if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_FILEPROTECTION_COMPLETE, NULL) == SQLITE_OK)
答案 0 :(得分:2)
Sqlite对你的旗帜中没有指定文件访问模式感到不满。它不知道它是否应该打开它是否可写,或者如果它不存在则是否创建它。因此,请添加以下两个标志以及您当前使用的标志:
SQLITE_OPEN_READWRITE
SQLITE_OPEN_CREATE
这表示sqlite应该打开一个可写数据库,如果它不存在则创建它。