Apple のデータ ストレージ ガイドラインを読みましたが、アプリで作成している sqlite データベース ファイルをどこに保管すればよいか、本当に混乱しています。アプリがオフライン モードの場合でも、sqlite ファイルから読み取りたい。作成されたそのようなファイルは、「バックアップしない」フラグを設定してライブラリ/キャッシュに保持する必要があることを読みました。同じことをするための正しいアプローチを教えてください。
質問する
4466 次
2 に答える
5
于 2012-08-07T06:30:59.237 に答える
1
これはあなたを助けるかもしれません。データベースをドキュメント ディレクトリにコピーするだけで十分です. バンドルのファイルは読み取り専用です. 状況によっては, いつでも更新する必要がある場合, データベースがドキュメント ディレクトリに存在しない場合は, 最初にデータベースをコピーすることをお勧めします.
データベースをドキュメント ディレクトリにコピーするためのサンプル コードは次のとおりです。
-(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];
}
このチュートリアルを参照でき ます。ドキュメント ディレクトリのファイル、コンテンツは読み取り、書き込みモードになっているため、データベースからコンテンツを読み取ることができます。
于 2012-08-07T06:46:56.697 に答える