获取核心数据相关实体属性

时间:2013-07-15 09:50:49

标签: objective-c core-data entity-relationship nsfetchedresultscontroller nsfetchrequest

我有两个多对多相关实体,CustomerCity以及从它们生成的NSManagedObject子类。我与CustomerCity的关系称为cities。在City中有一个名为city的属性。现在,我尝试使用简单的Customer

从实体fetchResultsController获取所有内容
-(NSFetchedResultsController *) fetchedResultsController {

  if (_fetchedResultsController != nil)
  {
      return _fetchedResultsController;
  }
  self.managedObjectContext = [[PTDataManager sharedManager] managedObjectContext];
  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
  NSEntityDescription *entity = [NSEntityDescription entityForName:@"Customer"
                                            inManagedObjectContext:[self managedObjectContext]];
  [fetchRequest setEntity:entity];

  _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                 managedObjectContext:self.managedObjectContext
                                                                   sectionNameKeyPath:nil
                                                                            cacheName:nil];
  _fetchedResultsController.delegate = self;

  return _fetchedResultsController; 
}

因此我使用谓词检索除cities属性((null)值之外的所有内容

@"cities.name CONTAINS[cd] %@"

Customer子类中,我可以使用方法:

-(City *)city 
{
  return (CDCities *)[[PTDataFetchHelper sharedInstance] entityForName:@"City"
                                                          withServerID:self.city_server_id
                                                             inContext:[self managedObjectContext]]; 
}

我正在检索city - 值很好,但这会减慢UI(在tableView中显示此数据)。
所以,问题:

  • 如果我执行这样的基本提取,我是仅检索指定实体的值,还是检索相关实体的值?
  • 如果我需要其他谓词,如何修改它以从city实体获取City属性?

1 个答案:

答案 0 :(得分:1)

获取请求仅获取一个实体类型。如果您抓取Customer,则会获得Customer秒。但是,您可以遍历核心数据关系,而无需执行其他获取请求。只需向任何Customer实例询问其cities属性的值。这将为您提供零个或多个City个实例,并且您可以询问其中每个实例的city属性。

我不确定你使用@"cities.city [cd]"得到了什么。这不是一个谓词。它可以是谓词的一部分,但它与city属性不匹配。这就像是等式的一面。