使用多重关系对核心数据中的顺序进行排序

时间:2010-12-21 21:43:03

标签: iphone cocoa cocoa-touch core-data

说我正在为一所学校建模,所以我有两个实体:学生和班级。无论出于何种原因,我希望每个班级名单都有自定义排序顺序。在一个简单的关系中,这意味着给Student一个sortOrder属性,只是按这个数字对列表进行排序。问题是,学生可能在一个班级中订购3个订单而在另一个班级中订购6个订单。如何以一种我可以轻松访问它们并正确排序列表的方式将这些排序存储在Core Data中?

 Student                  Class
 classes  <<--------->>  students
    ^                       ^
    |                       |
unordered                ordered

这个图可能有助于解释我正在尝试做什么。学生“名单”我希望以特定顺序获取存储在某个地方,这可能是任何顺序。存储这种顺序是我不确定如何以最有效的方式进行的。创建一堆Order对象并尝试管理链接听起来像很多开销,感觉必须有更好的方法。

2 个答案:

答案 0 :(得分:1)

如果可以通过一个或多个NSSortDescriptors来描述学生的顺序,则可以在Class实体上创建一个提取属性,该实体可以提取学生并应用排序描述符。或者,可能更容易(取决于您的使用案例)将排序描述符应用于您用于处理班级学生集合的NSFetchedResultsController

如果您无法使用NSSortDescriptor,那么如果只有一个订单,则您需要index实体上的Student属性(或您选择的名称) Order个实体的集合,描述每个Student的每个排序中的索引。您将负责维护这些索引值。不幸的是,在Core Data中没有简单的方法可以做到这一点。这只是很多工作。

答案 1 :(得分:0)

学生&lt;&lt; - &gt;&gt; StudentClass&lt;&lt; - &gt;&gt;类

StudentClass
----
studentID
order
classID 

然后你可以根据需要选择。

例如,您有student。获取StudentID为student.studentID的所有StudentClass。然后,您拥有order,以及访问该类。

您可能希望添加一些业务逻辑,以使您的生活更轻松。此外,如果您还没有使用它,请查看MOGenerator:https://github.com/rentzsch/mogenerator

编辑:我真的很想知道为什么这会被拒绝。评论将非常感激。