Core Data 中的排序顺序具有多重关系
Posted
技术标签:
【中文标题】Core Data 中的排序顺序具有多重关系【英文标题】:Sort order in Core Data with a multi-multi relationship 【发布时间】:2010-12-21 21:43:03 【问题描述】:假设我正在为一所学校建模,所以我有 2 个实体:学生和班级。无论出于何种原因,我希望每个班级名册都有一个自定义的排序顺序。在一个简单的关系中,这意味着给 Student 一个 sortOrder 属性,然后只按这个数字对列表进行排序。问题是,学生可能在一个班级中订购 3,而在另一个班级订购 6。我如何将这些排序存储在 Core Data 中,以便我可以轻松访问它们并对我的列表进行正确排序?
Student Class
classes <<--------->> students
^ ^
| |
unordered ordered
这张图可能有助于解释我想要做什么。我希望以存储在某处的特定顺序获取学生“名册”,该顺序可以是任何顺序。存储此顺序是我不确定如何以最有效的方式进行的操作。创建一堆 Order 对象并尝试管理链接听起来开销很大,感觉必须有更好的方法。
【问题讨论】:
【参考方案1】:如果学生的排序可以由一个或多个NSSortDescriptors
描述,您可以在Class
实体上创建一个fetched 属性,用于获取学生并应用排序描述符。或者,将排序描述符应用于您用来处理班级学生集合的NSFetchedResultsController
可能更容易(取决于您的用例)。
如果您不能使用NSSortDescriptor
,那么您需要Student
实体上的index
属性(或您选择的名称)如果只有一个排序或Order
实体的集合描述每个Student
的每个排序中的索引。您将负责维护这些索引值。不幸的是,在 Core Data 中没有简单的方法可以做到这一点。这只是很多工作。
【讨论】:
问题是不能用描述符来描述,因为排序是任意的,用户可以自定义。一旦我能够存储这个顺序,那么我应该能够使用排序描述符对结果进行排序。【参考方案2】:学生 > StudentClass > 班级
StudentClass
----
studentID
order
classID
然后您可以根据需要进行选择。
例如,您有一个student
。获取 StudentID 为 student.studentID
的所有 StudentClass。然后,您就拥有了 order
以及对 Class 的访问权限。
您可能希望添加一些业务逻辑以使您的生活更轻松。另外,如果您还没有使用它,请查看 MOGenerator:https://github.com/rentzsch/mogenerator
编辑:我真的很想知道为什么这会被否决。评论将不胜感激。
【讨论】:
ID 不会根据上下文是否保存而改变吗? studentID 是核心数据 ID 字符串的关系还是属性? 另外,MOGenerator 看起来很酷,但我的项目不是用它构建的。当我尝试在我的 Student 子类中引用 _Student 类时抱怨元类。 抱歉,我应该更具体一些。 studentID 和 classID 将是 you 将设置的变量(这明显不同于“正常”情况下的主键),并且不依赖于底层 SQL 引擎来执行此操作。但是,您需要保证各个表的唯一标识符。以上是关于Core Data 中的排序顺序具有多重关系的主要内容,如果未能解决你的问题,请参考以下文章