如何在 Core Data 中按顺序存储数据? [复制]

Posted

技术标签:

【中文标题】如何在 Core Data 中按顺序存储数据? [复制]【英文标题】:How to store data sequentially in Core Data? [duplicate] 【发布时间】:2016-05-20 11:20:06 【问题描述】:

我有一个名为OperationEntity 的实体。它与OperationInput 有一对多关系。

我有一个表格视图控制器,它显示所有已保存的OperationEntity。当用户点击其中一个单元格时,将执行转到另一个表视图控制器的 segue。该表视图控制器显示所有关联的 OperationInputOperationEntity

在 Xcode 为我生成的 NSManagedObject 子类中,availableInputs 属性被声明为 NSSet? 类型。我知道集合不保持其元素的顺序。这意味着我可以按以下顺序保存输入:

a
b
c

但是当我取回它时,我可能会按照这个顺序取回它

c
a
b

但我希望输入的顺序与保存时的顺序相同!

我该如何解决这个问题?

我曾想过将id 属性添加到OperationInput。每次我保存一个新的,我都会增加 id。当我获取它时,我根据 id 对数组进行排序。但我相信还有比这更好的方法。

也许用蛮力将NSSet? 更改为NSArray??这行不通,不是吗?

令人惊讶的是,我还没有发现有人在 Stack Overflow 上提问!

【问题讨论】:

这个已经被问过和回答过。搜索[core-data] preserve order会找到更多答案。 @MartinR 但是这个问题似乎已经过时了。从 Erik Johansson 的回答中,我可以看到这可以通过比添加 ids 更好的方式来完成。 对所引用问题的接受答案也提到了有序关系:“如果您可以针对 ios 5,那么您可以将新的 NSOrderedSet 功能用于任意有序的核心数据关系”我>。这正是 Erik 下面的建议。 – 添加一个 id 字段也是一个很好的解决方案,并且有它的优势,因为有序的关系可能很棘手。 【参考方案1】:

如果您选择关系并在数据模型检查器中查看,您有一个选项arrangement。如果你设置它,你将有一个 NSOrderedSet 来维持秩序。

【讨论】:

我必须再次生成NSManagedObject 子类,对吧? 是或者只是更新现有的。将NSSet 换成NSOrderedSet 谢谢ji先生我的问题已经解决了。

以上是关于如何在 Core Data 中按顺序存储数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多图中按排序顺序打印键的值

Core Data迁移后如何保持数据有序?

在 Swift Core Data 中对存储的数据模型提取进行排序

dplyr:在 R 中按字母顺序排列列

如何在所有行中按顺序更新组号

如何在 Core Data 中存储 CLPlacemark 地址数据