执行大型JSON数据请求并将其存储在Core Data中的最佳方法是什么?
我目前正从服务器获取一个JSON文件,其中包含一个包含关联实体的作业列表,然后我将对其进行解析并填充核心数据实体,该工作正常。
当用户刷新他们的列表时,我将向服务器执行新的请求,因此我假设我需要完全删除所有现有实体并重新填充数据库。
如何在Swift中最好地实现这种操作?
我找到了几个使用数据集的教程和示例,这似乎已经足够接近了。
如果您需要一些示例或现有代码,请告诉我
答案 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