2

現在の私のアプリには、約5,000の辞書の.plistがあり、実行時に、カスタムクラスの5,000のオブジェクトを作成するために使用します。それぞれにいくつかの文字列、いくつかのブール値などが含まれています。これはかなり迅速なプロセスであり、数秒かかりますが、数千のオブジェクトを含む.plistを使用すると少し扱いに​​くくなります。

Core Data(これまで使用したことはありません)に移行するので、最初のステップでは、その.plistからこれらのカスタムオブジェクトにデータを取得し、コンテキストに保存します。私はビデオなどを見てきましたが、それで大丈夫だと思います。

私の最初の質問は、オブジェクトグラフとデータモデルを小さな別のアプリ(たとえば、ObjectMakerと呼ばれる)で作成し、そこに保存して、.sqliteまたはデータを実際のアプリにエクスポートする形式でインポートできますか?作ってるの?そこから、すべてのフェッチリクエストを実行し、データをさらに編集して保存します。

私の2番目の質問は、ユーザーが最初にアプリを開いたときに取得するオブジェクトグラフの「最初の起動状態」を提供することは可能ですか(5,000個のオブジェクトが作成され、アクセス/クエリの準備ができているなど)。アプリに.sqliteまたはObjectMakerアプリでデータをエクスポートする形式を同梱し、.plistが存在することを知らなくてもそれを排他的に使用することを希望します。

ありとあらゆる回答をありがとうございました^_^

4

2 に答える 2

4

多くのアプリでこれを頻繁に行っています。開発中にデータモデルを構築しますが、多くの場合、製品を出荷するsqliteデータベースの「初期状態」に到達するために、一連のマスターデータをインポートし、デフォルトのアプリ構成を実行する必要があります。

アプリデリゲートには、「DBの作成とインポート」モードを切り替えるために使用できる#define(または変数)があります。作成モードを実行するときは、既存の.sqliteファイルを削除し、Core Dataスタックを再初期化してから、インポートルーチンを実行して、.plistおよび.csvデータを必要なCoreDataオブジェクトに変換します。

シミュレーターを使用して、ビルドして実行します。データをインポートし、アプリのデフォルトオプションを構成したら、実行しているアプリを含むシミュレーターフォルダーに移動し、データベースをコピーしてプロジェクトファイルにドロップします。

「DB作成およびインポート」モードが有効になっていない場合、最初に適切な場所にデータベースがあるかどうかを確認します。そうでない場合は、デフォルトのデータベースをメインバンドルからデバイスの適切な場所にコピーします。

于 2013-02-23T18:29:08.397 に答える
2

私の最初の質問は、オブジェクトグラフとデータモデルを小さな別のアプリ(たとえば、ObjectMakerと呼ばれる)で作成し、そこに保存して、.sqliteまたはデータを実際のアプリにエクスポートする形式でインポートできますか?作ってるの?そこから、すべてのフェッチリクエストを実行し、データをさらに編集して保存します。

もちろん。ObjectMakerアプリでSQLストアを作成できます。完了したら、そのストアを取得して、アプリのメインバンドルにコピーできます(自分で行う必要があります)。

起動時に、アプリはストアを次のようにメインフォルダーにコピーします。永続ストアは、そのフォルダーストアを指している必要があります。

NSString *storePath = [[self applicationDocumentsDirectory] 
    stringByAppendingPathComponent: @"yourStore.sqlite"];
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
    NSString *defaultStorePath = [[NSBundle mainBundle] 
        pathForResource:@"yourStore" ofType:@"sqlite"];
    if (defaultStorePath) {
        [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
    }
}

私の2番目の質問は、ユーザーが最初にアプリを開いたときに取得するオブジェクトグラフの「最初の起動状態」を提供することは可能ですか(5,000個のオブジェクトが作成され、アクセス/クエリの準備ができているなど)。アプリに.sqliteまたはObjectMakerアプリでデータをエクスポートする形式を同梱し、.plistが存在することを知らずにそれを排他的に使用することを希望します。

この質問について、私はあなたの目標を理解していませんが、私はいくつかのヒントを提供しようとします。まず、ユーザーが一度に5,000個のオブジェクトを使用するかどうかはよくわかりません。したがって、アドホッククエリ(NSFetchRequest)を実行するそれらの束を表示して、要求された場合にのみそれらを表示できます。さらに、テーブルを介してオブジェクトを表示する必要がある場合は、で遊ぶことをお勧めしNSFetchedResultsControllerます。このクラスはこのためにあります。これにより、データをより詳細に制御し、CoreDataにメモリ管理を任せることができます。たとえば、取得するオブジェクトの数を指定できます(たとえば10)。テーブルをスクロールすると、他の10個のオブジェクトがフェッチされます。

お役に立てば幸いです。他に何か必要な場合は、私に知らせてください。

于 2013-02-23T18:24:14.617 に答える