CoreDataを使用してCustomer
エンティティを保存するアプリケーションがあります。各Customer
エンティティには、、、customerName
およびcustomerID
その他のプロパティがあります。
次に、とを表示しているすべてのリストを表示Customers
しcustomerName
ますcustomerID
。
Customer
フェッチリクエストを実行してすべてのエンティティを取得することでこれをうまく行うことができますが、表示する必要があるのはcustomerName
andcustomerID
プロパティだけです。
質問1:
を使用しsetPropertiesToFetch
てこれらのプロパティのみを指定しようとしていますが、配列内の1つのオブジェクトのみを返すたびに。
私の方法は次のようになります。
NSFetchRequest *fetchRequest = [NSFetchRequest new];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Customer" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSDictionary *entProperties = [entity propertiesByName];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:[entProperties objectForKey:@"customerName"],[entProperties objectForKey:@"customerID"], nil]];
[fetchRequest setFetchLimit:30];
NSError *error;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"fetched objects count = %d", [fetchedObjects count]);
if (error) {
NSLog(@"Error performing fetch = %@", [error localizedDescription]);
return nil;
} else {
NSLog(@"successful fetch of customers");
for( NSDictionary* obj in fetchedObjects ) {
NSLog(@"Customer: %@", [obj objectForKey:@"customerName"]);
}
return fetchedObjects;
}
Customer
返される1つのオブジェクトは問題ないので、少なくとも1つのオブジェクトcustomerName
とを取得していることがわかりますcustomerID
。Customer
すべてのオブジェクトcustomerName
とを返すために必要customerID
です。
質問2:
これはこれを行うための最良の方法ですか?私の考えでは、データベースには最大10,000以上の顧客オブジェクトが存在する可能性があります。したがって、オブジェクト全体ではなく、テーブルに表示するために必要なプロパティのみをフェッチする方がメモリ効率が高くなりCustomer
ます。
次に、テーブルで顧客が選択されると、Customer
オブジェクト全体をフェッチして詳細を表示します。
ただし、近い将来、それぞれのエンティティが使用される可能性がある場合は、プロパティだけでなく、エンティティ全体をロードすることもお勧めします。アイデアは、1つのフェッチ要求が2つよりも優れているということだと思います。
ご協力ありがとうございました。