私はAppleのデータストレージのガイドラインを読んで、私は自分のアプリで作成しているsqliteデータベースファイルをどこに保管するべきかについて本当に混乱しています。私は、アプリケーションがオフラインモードであっても、sqliteファイルから読み込みたいです。私は、作成されたそのようなファイルは、 "バックアップしない"フラグが設定されたライブラリ/キャッシュに保存されるべきであると読んでいます。同じことをするための正しいアプローチを提案してください。ドキュメントディレクトリまたはライブラリ/キャッシュにsqliteデータベースファイルを書き込む必要がありますか?
答えて
答えはあなたのデータベースファイルが作成されている方法によって異なります。
According to the Data Storage Guidelines page:ユーザー生成され、またはそうでなければ、あなたのアプリケーションで再作成することはできません
のみの文書やその他のデータ/ Documentsディレクトリ に保存され、iCloudによって自動的に にバックアップされます。
再ダウンロードまたは再生成できるデータは、/ Library/Cachesディレクトリに保存する必要があります。ファイル の例として、データベースキャッシュファイル と、マガジン、新聞、 およびマップアプリケーションで使用されているようなダウンロード可能なコンテンツがキャッシュディレクトリに格納されます。
これは私には比較的明確なようだ:あなたのアプリはプログラム的に何かを作成したり、保存したいデータを生成した場合、「キャッシュ」フォルダに入れて。顧客自身が生成するユニークなもの(キーボードや手動で介入して入力したもの)があれば、それを「ドキュメント」に入れます。
「バックアップしない」とは、ファイルが決してがiCloudに送信され、紛失した場合はゼロから再作成する(または再インストールする)必要があることを意味します。
これはあなたを助けるかもしれません。文書ディレクトリにデータベースをコピーするだけで十分です。バンドルされているファイルは読み取り専用です。状況によっては、いつでも更新する必要がある場合は、文書ディレクトリにデータベースが存在しない場合は、まずデータベースをコピーしてください。
ドキュメントディレクトリにデータベースをされてコピーするためのサンプルコードは、次のとおりです。
-(void) checkAndCreateDatabase {
// Setup some globals
NSString *databaseName = @"AnimalDatabase.sql";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
// Check if the SQL database has already been saved to the users phone, if not then copy it over
BOOL success;
// Create a FileManager object, we will use this to check the status
// of the database and to copy it over if required
NSFileManager *fileManager = [NSFileManager defaultManager];
// Check if the database has already been created in the users filesystem
success = [fileManager fileExistsAtPath:databasePath];
// If the database already exists then return without doing anything
if(success) return;
// If not then proceed to copy the database from the application to the users filesystem
// Get the path to the database in the application package
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
// Copy the database from the package to the users filesystem
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
[fileManager release];
}
あなたが内容を読むことができるように、モードを書き、ドキュメントディレクトリ上のファイル、内容が読み込まれ、このTutorial を参照することができますデータベースから。
- 1. イメージデータをVCSに書き込む必要がありますか?
- 2. NSMutableArrayをドキュメントディレクトリに書き込むことができません。
- 3. 検証からdbに書き込む必要があります
- 4. Python:複数のレコードをExcelに書き込む必要があります
- 5. 、出力または入力ストリームにコマンドを書き込む必要がありますか?
- 6. exchange freebusyの情報を書き込む必要があります。
- 7. Javaでファイルを書き込むときに最後にclose()を呼び出す必要がありますか?
- 8. ファイルをディスクに書き込むときに、いつエンコーディングを指定する必要がありますか?
- 9. 配列からセルに書き込むときに範囲を指定する必要はありますか?
- 10. usb hid:アウトエンドポイント割り込みのコントロールパイプに "null"を書き込む必要があります
- 11. バインディングにはどのようなパスを書き込む必要がありますか?
- 12. Codename OneのAndroidネイティブ実装のLifecycleListenerメソッドには何を書き込む必要がありますか?
- 13. ルビにフルモジュールパスを書き込む方法はありますか?
- 14. setuptoolsがバイトコードを書き込む必要があるのはなぜですか?
- 15. ディスクに書き込むことができるNSMutableArrayを作成する必要があります
- 16. ファイルに書き込む前にunicode変数をエンコードする必要がありますか?
- 17. テキストファイルを読み込んで新しいファイルに書き込む必要があります
- 18. マルチクライアントWebアプリケーションでファイルにデータを書き込むのに役立つ必要がありますか?
- 19. Googleライブラリから読み込むときにjsapiを読み込む必要はありますか?
- 20. 別のプロセスメモリに書き込む方法はありますか?
- 21. arraryまたはsqliteデータベースを使用する必要がありますか?
- 22. SQLiteデータベースバージョン2.1または3.0を使用する必要がありますか?
- 23. List <>から名前を取得してリッチテキストボックスに書き込む必要があります
- 24. SQLクエリのORDER BY列をJSコードに書き込む必要がありますか?
- 25. 指数付きの文字列をファイルに書き込む必要があります
- 26. 2ファイルに書き込むためのwgetが必要
- 27. SQLiteは読み込み時にデータベースファイルをロックしますか?
- 28. SQLite Python;グリッドをスライダからデータベースに取り込む値を書き込む
- 29. このようなトランザクションとしてすべてのデータベースアクセスを書き込む必要がありますか?
- 30. .logファイルはiPhoneのドキュメントディレクトリに書き込まれません
私は完全に静的なアプリを開発しました。私は4メガバイト以上のサイズのデータを保管しています。このコンテンツでは、アプリは機能しません。私の場合は、どこにローカルデータベース(ドキュメントフォルダまたはライブラリフォルダ)を保存する必要があります – Warrior
[まあ私はあなたがすでに別の質問としてこれを求めているのを見ました](http://stackoverflow.com/questions/16767861/where-to-あなたのために答えを探しに行くでしょう –
新しい拡張機能と時計はどうなりますか? –