5

Apple のデータ ストレージ ガイドラインを読みましたが、アプリで作成している sqlite データベース ファイルをどこに保管すればよいか、本当に混乱しています。アプリがオフライン モードの場合でも、sqlite ファイルから読み取りたい。作成されたそのようなファイルは、「バックアップしない」フラグを設定してライブラリ/キャッシュに保持する必要があることを読みました。同じことをするための正しいアプローチを教えてください。

4

2 に答える 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 に答える