我想創建一個核心數據iPhone應用程序。我追蹤的其中一個實體是汽車,每輛汽車的一個屬性是「製造商」。iPhone核心數據 - 簡單查詢
在我的應用程序的「編輯汽車」部分,我有一個UIPickerView需要加載每個以前進入系統的獨特製造商。我想要做的是創建一個NSFetchRequest來獲得一個唯一的「製造商」屬性的數組,並使用它來填充UIPickerView。
我遇到的問題是,無論數據存儲中是否有零個記錄或100個,在元素零處執行的提取請求中總是有一個記錄,其值爲@「」。
我這樣做是錯誤還是有一個更簡單的方法來做到這一點?我希望我可以運行一個快速的SQL查詢!
我的代碼如下:
// Populate the manufacturerNameList array
NSManagedObjectContext *moc = [self.selectedLease managedObjectContext];
NSEntityDescription *ed = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:moc];
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:ed];
// Get only manufacturer and only uniques
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"manufacturer",nil]];
[fetchRequest setReturnsDistinctResults:YES];
// Sort by manufacturer in ascending order
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"manufacturer" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSError *error = nil;
self.manufacturerNameList = [moc executeFetchRequest:fetchRequest error:&error];
if (error) {
// Handle the error
}
NSLog(@"The count of self.propertyNameList is %i",[self.propertyNameList count]);
謝謝!
我完全明白你的意思,它肯定會爲我提供更多的靈活性,但事實是Cars是域中唯一的實體,我擔心添加另一個實體(製造商)擔心會使整體代碼更加複雜 - 因爲我唯一想要跟製造商做的事情就是追蹤它們與汽車實體。 鑑於此,您認爲此代碼是完成此操作的最簡單方法嗎? – 2010-01-20 22:47:11
在這種情況下,我認爲問題是您傳遞屬性名稱而不是NSPropertyDescriptions setPropertiesToFetch,然後將結果視爲汽車實體,而不是製造商字符串。 – 2010-01-20 23:01:37