【发布时间】:2013-01-21 04:41:33
【问题描述】:
背景:我一直在观看 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)
【问题讨论】:
-
只是为了好玩,试试
SQLITE_OPEN_FILEPROTECTION_COMPLETE|SQLITE_OPEN_CREATE如果这不起作用,然后发布错误。您必须从 sqlite API 获取它。如果你不知道怎么做……那么恐怕你还没有使用 sqlite 的业务。 -
@borrrden 谢谢,我对 SQLite 比较陌生。我查找了错误代码并更新了我原来的问题。请看一看。
-
参数组合无效。查看其他 sqlite 示例,我认为您还需要添加
SQLITE_OPEN_READWRITE以及SQLITE_OPEN_CREATE -
@borrrden 你是对的,请回答这个问题,以便我将其标记为答案。我还用你的答案更新了我的问题。
标签: ios database xcode encryption sqlite