在 CoreData 中使用单个实体时如何保持重新排序项目?

Posted

技术标签:

【中文标题】在 CoreData 中使用单个实体时如何保持重新排序项目?【英文标题】:How to persist reordering items when using a single entity in CoreData? 【发布时间】:2017-11-09 10:05:06 【问题描述】:

用户可以在 UITableView 中重新排序项目,数据来自单个实体。我想将用户定义的顺序(通过移动项目)保留回CoreData,这样当我取回记录时,顺序就是用户定义的顺序。我知道您可以通过在模型中添加一个整数属性来简单地做到这一点,但是如果我有很多记录,那将是低效的,因为我必须更新所有其他记录。有没有一种优雅的方法可以实现这一点,而不必使用我提到的方法?谢谢

【问题讨论】:

【参考方案1】:

如果这些项目与其他项目相关,您可以使用来自该其他项目的有序对多关系。这是 Core Data 提供的唯一选项。

不管怎样,如果您添加一个排序索引,您不需要在用户更改订单时更新“所有”其他记录。您只需要更新更改的开始和结束位置之间的那些。例如,如果用户将某物从索引 2 移动到索引 12,则索引 1 处的项目仍位于索引 1,并且索引 13 到 800 亿处的项目也具有相同的索引。

【讨论】:

以上是关于在 CoreData 中使用单个实体时如何保持重新排序项目?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit + CoreData:操作成功时替换实体内容,失败时保持原样

在 coredata 中保存实体数组

在 CoreData 中获取实体时,实体关系是不是也会加载到内存中?

从实体中删除属性后迁移 CoreData 时出错

在单个 NSOutlineView 中可视化不同的实体

核心数据 - 单个实体的多个条目