5

背景: WWDC 2011 - 208 Securing iOS application を見てきました。彼らは、NSFileProtection と呼ばれるファイル暗号化でデータを保護する方法について言及しています。言及された自動方法 (@38:00) にはバグがあることを発見しましたが、手動の方法 (@37:00) にはバグがないことを願っています。画像でファイル保護を使用してみましたが、すべて問題ありません。Sqlite しか作成できません。

問題: 3 番目の引数のフラグとして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 の 2 番目のコメントは、両方のフラグの必要性を指摘するのに適切でした。コードに従って動作します:

if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_FILEPROTECTION_COMPLETE, NULL) == SQLITE_OK)
4

1 に答える 1

2

Sqlite は、フラグでファイル アクセス モードが指定されていないことに満足していません。書き込み可能に開くかどうか、または存在しない場合に作成するかどうかはわかりません。したがって、現在使用しているフラグに加えて、次の 2 つのフラグを追加します。

SQLITE_OPEN_READWRITE
SQLITE_OPEN_CREATE

これは、sqlite が書き込み可能なデータベースを開き、存在しない場合は作成する必要があることを示しています。

于 2013-02-06T07:08:07.700 に答える