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对象,而不是创建/引用额外的属性。
感谢马丁,你的谓语绝对是更好的方法。 – JayD
随着进一步调查,我发现我的问题源于假定FRC动态变化。我正在对FRC谓词进行更改,并期望输出能够自行更改。我执行了下面的代码来解决这个问题: self.fetchedResultsController = nil; [NSFetchedResultsController deleteCacheWithName:@“Master”]; [[[self fetchedResultsController] collectionView] reloadData]; – JayD