2

考虑一个包含 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键。

关于如何使这个更清洁的任何想法?

4

1 回答 1

1

实际上,valueForKeyPath 选择器:

NSArray *symbols = [arrayOfDictionaries valueForKeyPath:@"@unionOfObjects.symbol"];
于 2012-07-09T08:19:45.700 回答