0

目的: ファイルからエンティティを作成する必要があります。

したがって、エンティティは CoreData のデータ モデルを表し、ファイルにはこのエンティティのすべての情報が含まれています。

インターネットから取得したすべてのファイル。このために、AFNetworking フレームワークを使用します。

ファイルの取得方法 (アルゴリズム):

  1. plist ファイルを要求します。plist ファイルには、ダウンロードする必要がある他の URL への値が含まれています。
  2. plist がデバイスの Documents ディレクトリにダウンロードされたとき。解析します。
  3. plist を解析すると、この plist を表す NSDictionary の各項目から URL を取得します。
  4. 次に、この URL から zip ファイルをリクエストします。
  5. zip ファイルがダウンロードされたら、それらを解凍して次のステップに進みます。
  6. 解凍されたファイルを解析し、データ モデルを作成します。

それは私の問題です。ローカルに保存されたファイルとサーバーに保存されたバージョンのファイルがあり、サーバー上のバージョンが変更されたときに、実際のデータでデータ モデルをリロードする必要があります。サーバーからすべてのデータを再度ロードする悪い方法は、ストレージ内のすべてのエンティティを削除し、新しいデータから新しいエンティティを作成することです。しかし、それは最初と 2 番目に専門的な方法ではなく、トラフィックに追加の負担がかかります。なぜなら、リロードする必要があるエンティティが 1 つしかない場合、実際の状態にある他のエンティティをリロードする必要があるからです。したがって、誰かがこの質問のベストプラクティスを知っているかもしれません。もちろん、私は自分のソリューションを作成することができ、それは機能しますが、人々がこの問題をどのように解決するかを見て、私のソリューションと他のソリューションの違いを理解したいと思っています.

4

2 に答える 2

1

これは些細なことです。最後の更新のタイム スタンプを持つ属性を保持し、変更されたエンティティと新しいエンティティをサーバーに要求するだけです。次に、必要に応じて挿入、更新、または削除します。

于 2013-06-06T12:05:46.077 に答える
0

検索または作成について話しているようです。データ セットのサイズとパフォーマンス要件に応じて、いくつかの方法でこれを行うことができます。

最初の方法は、既存の Core Data オブジェクトを取得し、エンティティの一意の属性をキーとして辞書に格納することです。次に、新しいデータをダウンロードするときに、解析されたオブジェクトごとにこのキーを取得し、辞書をチェックして、既存のオブジェクトを検索 (およびオプションで更新) したり、新しいオブジェクトを作成したりできます。

NSArray *fetchedObjects = //Fetch the existing objects;    

NSMutableDictionary *existingObjects = [NSMutableDictionary dictionary];

for (MyClass *object in fetchedObjects)
    [existingObjects setObject:object forKey:object.uniqueKey];

//Now iterate through the new data (using JSON as example here)

NSDictionary *downloadedItems = //Download data and serialise into JSON

for (NSDictionary *item in downloadedItems){

    NSString *uniqueValue = [item valueForKey:@"uniqueKey"];

    MyClass *object = [existingObjects objectForKey:uniqueValue];

    if (object==nil){

       object = //Insert new MyClass entity into MOC
       object.uniqueKey = uniqueValue;

       //Set any other values you only need to set once
    }

    //Set any values you may need to update every time
    //This would be where to check a modified date attribute
}

2 番目の方法はより洗練されており、メモリのオーバーヘッドが少なくなります。これは、 Core Data Programming Guideの Efficiently Importing Data セクションで説明されています。

このガイドは良い出発点となりますが、完全な解決策を提供するものではありません。私はここで答えを自分で試しました:基本的な配列比較アルゴリズム

于 2013-06-06T14:18:15.273 に答える