1

今数時間検索していますが、iOSアプリ用のxcodeで作成したデータベースへのパスが見つかりません。データベースが存在するため、データがアプリに読み込まれますが、データベースへのパスが見つかりません。xcode 4.5とios-simulator 6.0を使用しています。

Xcode/contents/ の下にいくつかのフォルダーが見つかりました。そこでデータベースを検索しましたが、うまくいきませんでした ^^.

それで、それは今どこに保管されていますか?

- (void)createOrOpenDB {
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docPath = [path objectAtIndex:0];

    dbPathString = [docPath stringByAppendingPathComponent:@"WorkoutPlans.db"];

    char *error;

    NSFileManager *fileManager = [NSFileManager defaultManager];

    //[fileManager removeItemAtPath:dbPathString error:nil];

    if(![fileManager fileExistsAtPath:dbPathString]) {
        const char *dbPath = [dbPathString UTF8String];

        if (sqlite3_open(dbPath, &workoutPlansDB) == SQLITE_OK) {
            const char *sql_cr_wp = "CREATE TABLE IF NOT EXISTS WORKOUTPLANS (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , NAME TEXT NOT NULL  UNIQUE , DESCRIPTION TEXT NOT NULL  UNIQUE)";
            const char *sql_cr_en = "CREATE TABLE IF NOT EXISTS ENTITY (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , NAME TEXT NOT NULL  UNIQUE , DESCRIPTION TEXT NOT NULL  UNIQUE )";
            const char *sql_cr_ex = "CREATE TABLE IF NOT EXISTS EXERCISE (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , NAME TEXT NOT NULL  UNIQUE , DESCRIPTION TEXT NOT NULL  UNIQUE , REPS TEXT NOT NULL , WEIGHT TEXT NOT NULL)";
            const char *sql_cr_plen = "CREATE TABLE IF NOT EXISTS WPEN (PLANID, ENID, FOREIGN KEY(PLANID) REFERENCES WORKOUTPLANS(ID) ON DELETE CASCADE, FOREIGN KEY(ENID) REFERENCES ENTITY(ID) ON DELETE CASCADE)";
            const char *sql_cr_enex = "CREATE TABLE IF NOT EXISTS ENEX (ENTITYID, EXERCISEID, FOREIGN KEY(ENTITYID) REFERENCES ENTITY(ID) ON DELETE CASCADE, FOREIGN KEY(EXERCISEID) REFERENCES EXERCISE(ID) ON DELETE CASCADE)";

            sqlite3_exec(workoutPlansDB, sql_cr_wp, NULL, NULL, &error);
            sqlite3_exec(workoutPlansDB, sql_cr_ex, NULL, NULL, &error);
            sqlite3_exec(workoutPlansDB, sql_cr_en, NULL, NULL, &error);
            sqlite3_exec(workoutPlansDB, sql_cr_plen, NULL, NULL, &error);
            sqlite3_exec(workoutPlansDB, sql_cr_enex, NULL, NULL, &error);
            sqlite3_close(workoutPlansDB);
        }
    }
}
4

1 に答える 1

2

データベースは次のパスに保存されます

/Users/SystemName/Library/Application\ Support/iPhone\ Simulator/6.1/Applications/Application UniqueName/Documents\データベース名

Xcode は、iPhone シミュレーターと連携して、アプリのビルドごとに新しいアプリ フォルダーを作成し、古いドキュメント フォルダーとその内容を新しいアプリ フォルダーに移動します。ドキュメント フォルダの内容を確認し、バンドル内のファイルがドキュメント フォルダ内のファイルよりも使用に適しているかどうかを判断するのは、ユーザー次第です。この決定は、軽々しくではなく、賢明に行う必要があります。

これは正しい動作です。ソフトウェアのユーザーは、データベースにいくつかの重要な変更や修正を加えた可能性があります。マイナーなバグ修正や機能強化のためにアップグレードするときに、データベースの変更、ハイスコア、変更された画像、またはアプリが保存したものが突然一般的なバージョンに置き換えられたら、おそらく彼らはそれを好まないでしょう.

あなたがすべきことは、新しいデータベースのデータとユーザーが持っているデータを比較することです.SQLiteの場合、ユーザーのエントリを新しいデータベースにインポートまたはコピーしてから、新しいデータベースを移動することができますドキュメントフォルダーに移動し、ユーザーのものを削除しますが、ユーザーのデータと新しいデータを含むフォルダーに置き換えます。

つまり、既存のデータベースをバンドルの新しいデータベースに置き換えないようにしてください。ユーザーの変更が吹き飛ばされるからです。

于 2013-03-28T05:43:57.153 に答える