根据多对多关系另一端的属性构建项目核心数据获取的最佳方法

时间:2015-02-19 00:52:09

标签: ios core-data

我正在构建一个自我测验风格的应用程序。它基本上是全屏幻灯片的集合视图。每张幻灯片都有多个注释,用户可以点按这些注释来测试自己。幻灯片按类别分组,用户可以按类别进行过滤。

我想实现根据用户是否已标记已知/未知/等来过滤注释的功能。我当前的数据模型(相关部分)如下所示:

---------------        ---------------------------------------------
| Slide       |        | Annotation                                |
---------------        ---------------------------------------------
| name        |        | lastKnown (enum for known/not known/etc.) |
| category    |        | ...                                       |
---------------        ---------------------------------------------
| annotations | <--->> | slide                                     |        
---------------        ---------------------------------------------

自上次知道/未知/等。响应生活在注释对象中,在我看来,我需要:

  1. 在幻灯片实体
  2. 上创建一个fetch(对于我的NSFetchedResultsController)
  3. 对所选类别使用谓词(因此我只从该类别中获取幻灯片)
  4. 过滤幻灯片是否有任何注释,其中lastKnown与所选的已知/未知/ etc过滤器匹配(以便如果来自该类别的幻灯片没有任何与所选已知/未知/等过滤器匹配的注释,它被排除在外)
  5. 我全都设置为1和2,但遇到麻烦3.我在这一点上的理解是每个幻灯片的注释关系将返回注释对象的NSSet。我似乎需要测试其中的每一个,看它们是否符合已知/未知/等标准。过滤。在我看来,我应该在谓词中执行它,所以我可以重新加载集合视图来刷新数据。

    有人能以最有效的方式提供一些最佳实践吗?

1 个答案:

答案 0 :(得分:1)

您应该查看ANY操作:

NSPredicate *slidePredicate = [NSPredicate predicateWithFormat:@"category == 'category'"];

NSPredicate *annotationPredicate = [NSPredicate predicateWithFormat:@"ANY annotations.lastKnown = 'known'"];

NSCompoundPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[slidePredicate, annotationPredicate]];