核心数据更新所有“索引”属性(iOS)

Posted

技术标签:

【中文标题】核心数据更新所有“索引”属性(iOS)【英文标题】:Core Data updating all "index" property (iOS) 【发布时间】:2017-02-18 02:57:07 【问题描述】:

我在实体“Task”中有一个名为“boardIndex”的核心数据属性 (NSNumber)。每个 boardIndex 都是唯一的,这意味着 boardIndex 3 不能有两个任务。

当我更新 boardIndex 时,比如从 3 到 5,我需要通过递增或递减 1(或什么都不做)来更新 Core Data 中的所有其他实体“boardIndex”属性。比如boardIndex为4的task现在为3,boardIndex为5的task现在为4,boardIndex为3的task现在为5;类似于 indexPath 在 tableView 中的工作方式。

这样做的最佳做法是什么?我读过“Core Spotlight”,但我不确定这是否是正确的方法。任何帮助都会很棒。

如果有帮助就写代码:

//This only updates one task, how to update other tasks?
task?.boardIndex = childIndexPath?.row as NSNumber?
DataBaseManager.sharedInstance.save()

【问题讨论】:

【参考方案1】:

当我更新 boardIndex 时,比如从 3 到 5,我需要通过递增或递减 1(或不执行任何操作)来更新 Core Data 中的所有其他实体“boardIndex”属性。

最好的方法是使用为您维护任务顺序的数据结构。使用 Core Data 的方法是使用有序对多属性。

创建一个单独的实体来保存任务列表。例如,您可能有一个Board 实体,它与Task 具有一对多、有序的关系。该有序关系将由一个 NSOrderedSet 对象表示,您可以向该对象添加您的任务。

我阅读了“Core Spotlight”,但我不确定这是否是正确的方法。

这是一种完全不同的索引——Spotlight 让用户可以搜索他们设备上的数据,而 Core Spotlight 让您可以在搜索中包含应用程序的数据。

【讨论】:

嗨,Caleb,抱歉耽搁了。我相信这是我需要的答案。谢谢!

以上是关于核心数据更新所有“索引”属性(iOS)的主要内容,如果未能解决你的问题,请参考以下文章

无法更新标识列“索引”。 EF核心

iOS核心数据索引属性没有提高性能

使用核心数据swift ios将实体的所有属性获取到tableview中的行中的标签

使用核心数据swift ios获取实体的所有属性到tableview中的行中的标签

ElasticSearch核心概念和文档的CRUD

iOS - 如何刷新/更新核心数据瞬态属性?