获取核心数据属性的NSArray
问题描述:
考虑包含元素的核心数据数据库,其中每个元素都有一个名为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
键。
有关如何使这个更清洁的任何想法?
答
事实上,valueForKeyPath选择:
NSArray *symbols = [arrayOfDictionaries valueForKeyPath:@"@unionOfObjects.symbol"];
为 'NSArray的' 不可见@interface声明选择 'allValues' - 这是对的NSDictionary选择。 – Joe 2012-07-10 00:49:17
对不起,我更正了答案,测试了它。 – Mundi 2012-07-10 07:34:55
编辑以反映正确的选择器是valueForKeyPath,另请参阅http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueCoding/Articles/CollectionOperators.html以获取集合运算符的说明。 Upvote编辑批准。 – Joe 2012-07-11 01:47:54