0

エンティティCityがあります。

BankBranchesNotaryBranchesなど、他のエンティティがあります。これらのエンティティは、 Cityエンティティとの多対1 の関係です。また、Cityエンティティは、それらのエンティティと1対多の関係を持ちます。

では、City エンティティの都市名だけをフェッチすると、それらのエンティティ オブジェクトもフェッチされるのでしょうか。フェッチのパフォーマンスについて警告しています。他のすべての関連オブジェクトに触れずに、都市名のみを取得したい場合があるためです。

4

2 に答える 2

1

都市名のみを検索する場合は、NSFetchRequest インスタンスの setPropertiesToFetch: メソッドを使用して、フェッチをさらに効率的に行うことをお勧めします。名前を表す NSPropertyDescription を割り当てます。仕組みは次のとおりです。

NSFetchRequest *fetchRequest=[[NSFetchRequest alloc] init];
NSEntityDescription *entity=[NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];
NSDictionary *properties=[entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[properties valueForKey:@"yourPropertyName"]]];

このフェッチ リクエストを使用すると、フェッチされた各オブジェクトのディクショナリが取得され、フェッチしたプロパティのみが取得されます。この方法の唯一の欠点は、完全な永続追跡モードで NSFetchedResultsController を使用できないことです。基本的に、これを使用して NSFetchedResultsController から追跡モードを取得しません。

于 2012-08-24T13:47:13.573 に答える
1

いいえ、Core Data は「フォールティング」と呼ばれるメカニズムを使用して、使用されるメモリの量を減らします。それがどのように機能するかについての説明があります: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html

于 2012-08-24T11:33:36.147 に答える