获取核心数据属性的NSArray

时间:2012-07-09 02:37:30

标签: objective-c core-data

考虑一个包含Elements的Core Data数据库,其中每个Element都有一个名为symbol的属性,问题是获得每个符号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 个答案:

答案 0 :(得分:1)

确实,valueForKeyPath选择器:

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