0

我想弄清楚,如果我正在使用正确的谓词来获取具有FRC给定类别对象与以下模型和代码的Item对象:NSFetchedResultsController,NSPredicate检索子对象的多对多关系

类别< ----- >>产品

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]; 
} 

如果在类别没有条目,我在的CollectionView项目数设置为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对象,而不是创建/引用额外的属性。

回答

2

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

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

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

+0

感谢马丁,你的谓语绝对是更好的方法。 – JayD

+0

随着进一步调查,我发现我的问题源于假定FRC动态变化。我正在对FRC谓词进行更改,并期望输出能够自行更改。我执行了下面的代码来解决这个问题: self.fetchedResultsController = nil; [NSFetchedResultsController deleteCacheWithName:@“Master”]; [[[self fetchedResultsController] collectionView] reloadData]; – JayD