我有一個應用程序使用CoreData來存儲Customer
實體。每個Customer
實體都有一個customerName
,customerID
和其他屬性。CoreData和setPropertiesToFetch僅返回1實體
然後我顯示所有Customers
的列表,只顯示他們的customerName
和customerID
。
我可以通過執行獲取請求來抓取所有的Customer
實體,但我只需要顯示customerName
和customerID
屬性。
問題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
對象以顯示其詳細信息。
但是,我讀過,加載整個實體,而不是隻是它的屬性,如果相應的實體可以在不久的將來使用它也是一個好習慣。我想這個想法是,單個獲取請求比兩個要好。
謝謝你的幫助。
如果刪除提取限制,會發生什麼情況? – ChrisH 2013-02-14 15:49:21