无法在iOS中创build具有文件保护function的SQLite3数据库

背景:我一直在观看WWDC 2011 – 208保护iOS应用程序。 他们提到如何使用称为NSFileProtection的文件encryption来保护我们的数据。 虽然我发现自动方法(@ 38:00)被窃听 ,我希望手动方式(@ 37:00)不是。 我尝试使用图像文件保护,一切都很好。 只有Sqlite我不能创build。

问题:我尝试使用sqlite3_open_v2创buildSQLite3数据库(无核心数据),并将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) 

Sqlite不喜欢你的标志中没有指定文件访问模式。 它不知道是否应该打开它,还是不知道是否创build它,如果它不存在。 因此,添加以下两个标志以及您当前使用的标志:

SQLITE_OPEN_READWRITE
SQLITE_OPEN_CREATE

这表示sqlite应该打开一个可写的数据库,如果它不存在,就创build它。