NSFetchedResultsController,NSPredicate在多对多关系中检索子对象

时间:2013-08-30 19:41:09

标签: core-data uicollectionview one-to-many nspredicate nsfetchedresultscontroller

我试图弄清楚我是否正在使用正确的谓词来获取具有以下模型和代码的FRC的给定Category对象的Item对象:

类别< ----->>项目

NSEntityDescription *entity =
  [NSEntityDescription entityForName:@"Item"
              inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSSortDescriptor *sortDescriptor =
    [[NSSortDescriptor alloc] initWithKey:@"itemLabelText" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];

[fetchRequest setSortDescriptors:sortDescriptors];

if (self.category.items) {
  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@",
                            self.category.items];
  [fetchRequest setPredicate:predicate];
}

如果类别中没有项目,我将集合视图中的项目数设置为0。

- (NSInteger)collectionView:(UICollectionView *)collectionView
 numberOfItemsInSection:(NSInteger)section
{
  if ((self.category.items == nil) || [self.category.items count] == 0) {
    return 0;
  }

  id <NSFetchedResultsSectionInfo> sectionInfo =
  [self.fetchedResultsController sections][section];
  return [sectionInfo numberOfObjects];
}

FRC返回对象上下文中的所有项目,而不仅仅是指定类别中的项目。我试图直接获取Item对象,而不是创建/引用额外的属性。

1 个答案:

答案 0 :(得分:2)

获取指定类别的所有项目的“通常”(和更简单)谓词是

[NSPredicate predicateWithFormat:@"category = %@", self.category]

假设“类别”是从“项目”到“类别”的反向关系。