我阅读了一些教程,建议在实施核心数据时使用两个(或更多个)NSManageObjectContexts
,以免阻塞主队列的UI。但是,我有些困惑,因为有些人建议将persistent store coordinator
的子上下文设置为mainQueueConcurrencyType
类型,然后为其提供自己的privateQueueConcurrencyType
类型的子上下文,而另一些则建议相反。
我个人认为使用两个上下文的最佳设置是使persistent store coordinator
-> privateQueueConcurrencyType
-> mainQueueConcurrencyType
,然后仅保存到私有上下文,并且仅从主要背景阅读。我对这种设置的好处的理解是,保存到私有上下文将不必遍历主上下文,并且在阅读主上下文时将始终包括对私有上下文所做的更改。
我知道许多应用程序都需要一个独特的解决方案,该设置可能不适用于此设置,但是作为一般的良好做法,这有意义吗?
编辑:
有人指出,引入NSPersistentContainer
并不需要此设置。我之所以问这个问题,是因为我在工作中继承了一个大型项目,该项目使用iOS-10之前的设置,并且遇到了问题。我愿意使用NSPersistentContainer
重新编写我们的核心数据栈,但是除非我能找到一个示例,说明如何针对我们的用例设置它,否则我不愿意花时间在上面。时间。
以下是我们大多数主要用例所遵循的步骤:
1)用户编辑对象(例如,将照片/文本添加到抽象对象)。
2)创建一个对象(同步任务)以封装API调用,以更新服务器上的已编辑对象。同步任务被保存到队列中的核心数据中,以便一个接一个地触发,并且仅在可用Internet时(因此允许脱机编辑)触发。
3)编辑后的对象也立即保存到核心数据中,然后返回给用户,以便UI反映其更新。
使用NSPersistentContainer
,是否可以在performBackgroundTask
中完成所有编写工作,并在viewContext
中完成所有查看工作,足以满足我们对上述用例的需求?
答案 0 :(得分:0)
自iOS10起,您无需担心任何这些,只需使用NSPersistentContainer
为您提供的上下文即可。