0

ドキュメント ディレクトリにある database.sqlite データストア ファイルを使用して、プロジェクトでコア データを使用しています。私のアプリケーションでは、この sqlite ファイルをバックアップとしてエクスポートして、後で復元することができます。バックアップは正常に機能します。

iOS6 デバイスからエクスポートしたバックアップ ファイルがあります。このバックアップ ファイルをアプリにインポートしたいと考えています。私はファイルをメールの添付ファイルとして持っており、open-in を使用してアプリで開きます。iOS6以前では問題なく動作します。同じファイルを数回インポートしようとしましたが、うまく機能します。

最近、データベース スキーマを新しいバージョンに変更しました。この新しいバージョンでは、自動移行で新しいデータベースに切り替えることができます。デバイスが iOS6 の場合、古いデータベース ファイルまたは現在エクスポートされている任意のファイルをインポートできます。何度でもできます。

これで、デバイスを iOS7 に変更すると、最近エクスポートしたファイルを何度でもインポートできます。しかし、以前にエクスポートした古いファイルをインポートしようとすると、一度インポートできます。アプリは正常に動作します。次に、もう一度インポートしようとしましたが、2 回目以降は失敗します。タイトルにあるようにエラーが発生します。iOS7 のみで、2 回連続で試行した場合のみ。

インポートされたファイルに解凍するために Scarybug ドキュメントを使用しています。次に、既存の sqlite データベース ファイルをインポートしたファイルに置き換えます。iOS6 では毎回動作し、iOS7 では初めて動作しますが、iOS7 では 2 回目から失敗します。

インポートが実行される前に、すべての変更がコミット/保存され、管理オブジェクト コンテキストがリセットされ、永続ストア コーディネーターがリセットされます。新しいファイルは古いファイルに取って代わり、長い間機能しています。問題は iOS6 からエクスポートされた同じファイルで 2 回目の試行から iOS7 でのみ見つかった

ヘルプとクエリをいただければ幸いです。ありがとう。

4

1 に答える 1

0

この辞書を追加しました -

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary];
[pragmaOptions setObject:@"NORMAL" forKey:@"locking_mode"];
[pragmaOptions setObject:@"DELETE" forKey:@"journal_mode"];

オプション辞書へ -

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
                         pragmaOptions, NSSQLitePragmasOption, nil];

persistStoreCoordinator を作成するために使用されます。そして、それは私の問題を解決しました。

于 2013-10-22T10:23:44.873 に答える