我有一个NSFetchResultsController,它返回按部分排列的ManagedObjects。
这些部分是我的name
个对象共有的Category
个对象的NSString Feed
:
现在,在某些情况下,我想从以下部分获取Category
:
NSString *sortKey = @"category.name";
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Feed"];
NSSortDescriptor *sortDescriptorCategory = [NSSortDescriptor sortDescriptorWithKey:sortKey ascending:asc];
此时此刻,我这样做了:
Category *cat = ((Feed *)[[[self.fetchedResultsController sections][section] objects] objectAtIndex:0]).category;
这是恕我直言,非常难看。特别是因为它禁止我有空的部分,但如果我创建新的部分,我想将现有的Feed
移动到其中,可能会发生。
所以我的问题是:如何访问定义Category
列表中各节的Feed
对象?
另外,我怎样才能有效地收集NSSet中所有部分的列表?
提前感谢您的帮助。
答案 0 :(得分:1)
检索section对象的方法没问题,你应该只包括健全性检查。
NSArray *feeds = [self.fetchedResultsController.sections[section] objects];
Feed *aFeed = [feeds anyObject];
return aFeed ? aFeed.category : nil;
所有部分的列表为NSSet
:
[NSSet setWithArray:self.fetchedResultsController.sections];
如果要在节标题中广泛使用类别实体,可能最好更改设置:获取类别而不是提要,并更改表视图数据源方法以反映此设置,例如
// number of rows for section
Category *category = self.fetchedResultsController.fetchedObjects[section];
return category.feeds.count;
您需要引入排序标准,将feeds
集更改为节的行数组。