Swift:如何避免 CoreData 中的重复条目以使用 JSON 数组实现?

Posted

技术标签:

【中文标题】Swift:如何避免 CoreData 中的重复条目以使用 JSON 数组实现?【英文标题】:Swift : How to avoid duplicate entries in CoreData for implementation with JSON array? 【发布时间】:2016-05-20 14:33:29 【问题描述】:

我正在用 Swift 开发一个应用程序,它从 API 获取 JSON 记录,将其转换为 NSArray 并在 UITableView 中重新加载。 我需要将 NSArray 与 CoreData 映射,并且在向 API 发出新请求时,如果在 JSON 响应中添加了新子项,则我必须仅将那个子项存储在 CoreData 中。 IE。我必须避免在 CoreData 中重复 NSArray 的值。

我发现很少有解决方案是“对数据模型使用唯一约束”和“HyperSync 和 DATAStack”,但我无法这样做。我是否必须实现一个模块来检查所有记录?

【问题讨论】:

【参考方案1】:

如果您在 JSON 中的对象有一些标识,例如[ "id" : 4, ... ...],那么您应该将这些“id”值存储在您的 CoreData 对象中,并在创建新对象之前尝试在映射期间获取已经存在的值。

如果 JSON 对象中没有标识或唯一字段,则您的任务无法解决。

例如RestKit 框架会自动为您完成所有这些工作,您只需配置映射和identificationAttributes

【讨论】:

我想在不安装任何 Pod 的情况下这样做。正如您提到的,我只需要获取现有的,我该怎么做。你能给我推荐任何关于 RESTKit 的好教程吗?谢谢。 RestKit 是 Pod,这里提供了基本示例:github.com/RestKit/RestKit 如果你想自己做,并且你有JSON对象的唯一标识,那么你可以把这个属性存储在你的ManagedObject的一些“externalId”属性中。然后,在创建新对象之前,通过条件“externalId = %@”、objectJson[@“id”] 获取现有对象。如果没有现有对象 - 然后创建新对象,否则更新现有对象。

以上是关于Swift:如何避免 CoreData 中的重复条目以使用 JSON 数组实现?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中通过 MR 的 id 从 coredata 中选择一条记录

从 tableView 上的核心数据填充数据时如何避免行重复

如何覆盖核心数据中的数据?如何解决Core Data中的重复数据?

如何在 Swift 中使用区分大小写和不区分大小写的混合字符串避免 Array 中的重复条目?

如何使用 Swift3 访问 CoreData 中的数据索引

如何使用 Swift 删除 coredata 中的特定记录?