CoreData:什么时候可以使用几个fetchResultsControllers?

时间:2013-08-28 08:34:18

标签: ios core-data nsfetchedresultscontroller

仍然在我的RSS阅读器开发中,我使用以下模型:

Categorie -> Feed -> Post

对于我的主视图控制器,我想在类别名称旁边显示未读帖子的数量(read NSDate为nil的帖子。)

由于我需要一个NSFetchResultsController来选择类别,我还需要另一个来获得Category.feeds.posts.read == nil计数吗?

你会怎么做?

1 个答案:

答案 0 :(得分:2)

不,您不需要单独的获取结果控制器。

我理解你的问题的方式:你想要显示一个类别列表。对于每个类别名称,您要显示未读消息的数量。

我会像你这样在你的Category类中实现一个fetched属性。

@implementation Category ()

-(NSUInteger)unreadMessages {
   NSUInteger count = 0;
   for (Feed *feed in self.feeds) {
      NSSet *posts = [feed.posts filteredSetUsingPredicate
       [NSPredicate predicateWithFormat:@"read = null"]];
      count += posts.count
   }
   return count;
}

@end

我认为,如果你要将一个标志属性unread(重命名为read改为firstReadDate)并将默认设置为1以便发布,那将会更有效率:

for (Feed *feed in self.feeds) {
  count += [[feed.posts valueForKeyPath:@"@sum.unread"] integerValue];
}