【问题标题】:Fetching Core Data related Entities properties获取核心数据相关的实体属性
【发布时间】:2013-07-15 09:50:48
【问题描述】:

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

-(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-values,但这种方式会减慢 UI(在 tableView 中显示此数据)。
所以,问题:

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

【问题讨论】:

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


    【解决方案1】:

    获取请求仅获取一种实体类型。如果你获取Customer,你会得到Customers。但是您可以遍历 Core Data 关系而无需执行额外的 fetch 请求。只需向任何Customer 实例询问其cities 属性的值即可。这将使您获得零个或多个 City 实例,并且您可以向每个实例询问其 city 属性。

    我不确定您对@"cities.city [cd]" 的看法。那不是谓词。它可能是谓词的一部分,但它与 city 属性不匹配。这就像等式的一侧。

    【讨论】:

    • 感谢您的回答,先生!抱歉,我累了,所以写错了谓词,我的版本 - @"cities.name CONTAINS[cd] %@",问题已更新。但是,如果我想要所有城市类型对象的所有名称属性,我应该在说明符中设置什么?
    • 我不明白你在做什么。谓词通过只允许与谓词匹配的实例来限制结果。既然你说你想要所有这些,那么谓词就没有用了。如果您想要所有城市名称,为什么不获取 City 而不是 Customer
    • 我想从Customer 获取所有内容以及Citycity 属性的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多