2

現在、モデルAとモデルBの2つのコアデータモデルがあります。

モデルAにはモデルBの値が必要です(モデルA->エンティティ1-> valueFromModelB)

現在、モデルAのNSObjectのサブクラスでフェッチリクエストとフィルタリングを実行しています。ただし、この値を頻繁に更新する必要があるため、これはあまり効率的ではないようです。

これを達成するための最良の方法は何でしょうか?モデルAとモデルBのエンティティをマージして、2つの間に関係を作成する方がよいでしょうか。理想的にはこれらを分離したいのですが、マージがより簡単で効率的であれば、そのルートに進むことができます。

4

2 に答える 2

1

あなたの質問から、オーバーヘッドを節約するためにプリフェッチのオプションをすでに検討したかどうかはわかりませんでした。Core Data Documentationによると、これがプリフェッチ用のコードスニペットです。

NSManagedObjectContext *context = /* get the context */;
NSEntityDescription *employeeEntity = [NSEntityDescription
entityForName:@"Employee" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:employeeEntity];
[request setRelationshipKeyPathsForPrefetching:
[NSArray arrayWithObject:@"department"]];

このコードは従業員と部門の情報を取得しますが、Departmentが別のデータモデルにあるかどうかはわかりませんでしたが、NSPersistentStoreCoordinatorなどを使用して使用できます。

AppleのCoreDataパフォーマンスに関する推奨事項のもう1つの注意点は、

永続ストアへの各ラウンドトリップ(各フェッチ)では、ストアへのアクセスと、返されたオブジェクトの永続スタックへのマージの両方でオーバーヘッドが発生します。代わりに、必要なすべてのオブジェクトを返す単一のリクエストにそれらを組み合わせることができる場合は、複数のリクエストの実行を避ける必要があります。また、メモリ内にあるオブジェクトの数を最小限に抑えることもできます。

したがって、理想的には、2つの異なるコアデータモデルをマージできる場合、メモリとデータをフェッチするためのラウンドトリップを節約できます。

于 2012-05-17T18:53:53.170 に答える
-1

同じdataModelに異なるエンティティを作成し、エンティティ間の関係を作成します。それははるかに速くて簡単でしょう。:)

于 2012-05-17T14:41:10.210 に答える