ペアとアイテムの2つのテーブルのレコードで構成されるデータがあります。これらのテーブルは、多対多の関係でリンクされています。コア データ エンティティを埋める方法は 2 つあります。すでにすべての項目を満たしているとしましょう。今度はペアを埋める必要があります。どちらの場合も、「識別子」は追加のテキスト プロパティ/フィールドです。
方法 1 (NSFetchRequest のみ):
//get data which should be converted to core data entities
id pairsInfoArray = ...;
for (id pairInfo in pairsInfoArray) {
//get items by identifier using NSFetchRequest
id item1 = ...;
id item2 = ...;
//create pair entity
id pair = ...;
pair.items = [NSSet setWithObjects:item1, item2, nil];
}
方法 2 (NSFetchRequest を 1 回だけ呼び出し、代わりに NSDictionary/NSMutableDictionary を使用します):
//get all items via NSFetchRequest
NSArray *itemsObjArray = ...;
//place all the items into array as key = item.identifier, value = item (as object)
NSMutableDictionary *itemsObjDict = ...;
//get data which should be converted to core data entities
id pairsInfoArray = ...;
for (id pairInfo in pairsInfoArray) {
//get items by key from itemsObjDict
id item1 = ...;
id item2 = ...;
//create pair entity
id pair = ...;
pair.items = [NSSet setWithObjects:item1, item2, nil];
}
すべてのデータ (アイテムとペアだけでなく) は、5 分 (way1) と 45 秒 (way2) の間に満たされます。行う時間も含めて[context save:nil]
です。
私が見たように、2番目の方法は最初の方法よりもはるかに高速に機能します。しかし、それには隠れた欠点がありますか?たとえば、アイテムを追加の辞書に保存すると、メモリが無駄になりませんか?