我有一个使用 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
对象customerName
和customerID
. 我只需要它来返回所有Customer
对象customerName
和customerID
.
问题2:
这是最好的方法吗?我的想法是数据库中可能有多达 10k+ 个 Customer 对象。因此,仅获取所需的属性以显示在表中而不是整个Customer
对象中会节省内存。
然后,当在表中选择客户时,我会获取整个Customer
对象以显示其详细信息。
但是,我读到如果可以在不久的将来使用相应的实体,加载整个实体而不是仅仅加载它的属性也是一个好习惯。我想这个想法是单个获取请求比两个更好。
谢谢您的帮助。