5

sqliteデータベースをXCode4に追加したい(XCode 3にも適用されます)。チュートリアルでは、.dbファイルをresourcesフォルダーに追加すると記載されています。これは、ビルド中に〜/ Library / Application Support / iPhone Simulator / 4.2 / Applications / {some-id} /Documents/NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)にコピーされます。 等

ただし、XCode4には表示可能なリソースフォルダーがありません。

[ファイルの追加...]コマンドを使用してファイルを追加しようとすると、[ターゲット]>[AppName]>[バンドルリソースのコピー]に表示されますが、常に空の.dbファイルが上記のドキュメントフォルダーに表示されます(手動で置き換えます-明らかに正しいアプローチではありません!)

(CoreDataよりもsqliteを使用しているデータの性質上)

4

2 に答える 2

11

プロジェクトにdbを追加し始める必要があります-xcode、それでそれはあなたのバンドルフォルダに追加されます、そこであなたはコードを通してそれを見つけることができます:

[NSBundle mainBundle]

これは、アプリを「ビルド」するときにxcodeを介してファイルを追加できる唯一のフォルダーです(最終的にはサブフォルダーを使用しますが、「ドキュメント」としての「システム」フォルダーは使用しません)。メインバンドルフォルダーは「読み取り専用」であるため、書き込み権限でデータベースを使用することはできません。したがって、通常の方法は次のとおりです。

1)dbを使用する場合は、コードを介してapp:documentsフォルダーに存在するかどうかを確認します。もちろん、初めてではないので、

2)メインバンドルからコピーします

- (BOOL)transferDb {
    NSError **error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"yourData.db"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle =  [[ NSBundle mainBundle] pathForResource:@"preferenze" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath:path error:error];
        return YES;
    }
    return NO;
}

3)ドキュメントフォルダで使用(r / w)

ps:そして(もちろん)iPhone /シミュレーターでdbを使用/編集/書き込みするとき、おそらくレコードを追加するとき、メインバンドルにあるものともちろんあなたのmac/プロジェクトにあるものは更新されないことに注意してください、レコードは追加されないため、何らかの理由でiPhone /シミュレーターでアプリを削除した場合(またはxCodeの[ビルド]メニューで[すべてのターゲットをクリーンアップ]した場合)、check/copyメソッドは"virgin"dbをコピーします。ドキュメントフォルダが再び表示されるので、すべての変更が失われます...

于 2011-02-17T07:19:44.723 に答える
2

Documentsフォルダに入れるデータの量に注意してください。これはユーザーデータ用です。このデータはiCloudを使用してバックアップされるため、AppleはアプリがDocumentsフォルダに保存して使用できるデータの量を制限しています。

この方法で6MBのSQLiteデータベースを使用したため、私のアプリは拒否されました。代わりに、それをキャッシュディレクトリNSCachesDirectoryにコピーします。

または、ファイルがバックアップされないようにします:https ://developer.apple.com/library/ios/#qa/qa1719/_index.html

于 2012-04-23T14:17:15.160 に答える