CoreData:访问用于在NSFetchedResultsController中标记节的对象

时间:2013-09-05 18:20:31

标签: ios core-data nsfetchedresultscontroller sections

我有一个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中所有部分的列表?

提前感谢您的帮助。

1 个答案:

答案 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集更改为节的行数组。