2012-07-09 168 views
2

考慮包含元素的核心數據數據庫,其中每個元素都有一個名爲symbol的屬性,問題是獲取每個符號的NSArray的最簡潔的方法。這可以通過沿獲取核心數據屬性的NSArray

-(NSArray*)symbolsInDatabase { 
    ENTRY_LOG; 

    NSError* err; 

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Element"]; 
    request.resultType  = NSDictionaryResultType; 
    request.propertiesToFetch = [NSArray arrayWithObject:@"symbol"]; 

    NSArray* arrayOfDictionaries = [self.database.managedObjectContext executeFetchRequest:request error:&err]; 
    NSMutableArray* symbols = [[NSMutableArray alloc]initWithCapacity:[arrayOfDictionaries count]]; 

    for (NSDictionary* d in arrayOfDictionaries) { 
    [symbols addObject:[d objectForKey:@"symbol"]]; 
    } 

    EXIT_LOG; 
    return symbols; 

} 

線的東西來完成但是有一種揮之不去的感覺,我失去了一些東西,而且我可以在一些巧妙的方式來使用-(NSArray*)filteredArrayUsingPredicate而不是迭代字典陣列上,提取對象爲symbol鍵。

有關如何使這個更清潔的任何想法?

回答

1

事實上,valueForKeyPath選擇:

NSArray *symbols = [arrayOfDictionaries valueForKeyPath:@"@unionOfObjects.symbol"]; 
+0

爲 'NSArray的' 不可見@interface聲明選擇 'allValues' - 這是對的NSDictionary選擇。 – Joe 2012-07-10 00:49:17

+0

對不起,我更正了答案,測試了它。 – Mundi 2012-07-10 07:34:55

+0

編輯以反映正確的選擇器是valueForKeyPath,另請參閱http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueCoding/Articles/CollectionOperators.html以獲取集合運算符的說明。 Upvote編輯批准。 – Joe 2012-07-11 01:47:54