Swift导入大型JSON数据集和核心数据

时间:2015-07-15 15:02:55

标签: ios json swift core-data

执行大型JSON数据请求并将其存储在Core Data中的最佳方法是什么?

我目前正从服务器获取一个JSON文件,其中包含一个包含关联实体的作业列表,然后我将对其进行解析并填充核心数据实体,该工作正常。

当用户刷新他们的列表时,我将向服务器执行新的请求,因此我假设我需要完全删除所有现有实体并重新填充数据库。

如何在Swift中最好地实现这种操作?

我找到了几个使用数据集的教程和示例,这似乎已经足够接近了。

如果您需要一些示例或现有代码,请告诉我

3 个答案:

答案 0 :(得分:4)

Stack Overflow已经多次询问和回答了这个问题。您想要导入数据,然后在刷新时要解决经典的插入/更新问题。

您希望在后台线程上执行此导入,以避免中断UI。

您不想删除所有对象。您希望使用KVC从传入的JSON获取所有ID,然后对CD执行单次提取以找出已存在的内容。

然后,您希望迭代JSON,如果它尚不存在则插入,并在它存在时进行更新。

由于您的用户界面应该使用NSFetchedResultsController,因此您只需要保存私人NSManagedObjectContext,您的用户界面就会因此而更新。

答案 1 :(得分:1)

你应该看看Groot。它提供了一种从JSON序列化核心数据对象图的简单方法,而无需在核心数据之上添加任何抽象层。

答案 2 :(得分:0)

iOS9中为Core Data引入了唯一性。因此,您不必使用NSFetchedResultsController并比较/清除旧数据。

你必须这样做:

managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy

您可以在此处找到更详细的答案 - How to add unique constraints for some fields in Core Data