Ios 关于如何通过UI响应处理后台和前台核心数据的指导
所以我在这里玩了很长时间这个“问题”,我一直在讨论问题: 这里或多或少是我想要的数据流Ios 关于如何通过UI响应处理后台和前台核心数据的指导,ios,core-data,Ios,Core Data,所以我在这里玩了很长时间这个“问题”,我一直在讨论问题: 这里或多或少是我想要的数据流 用户转到控制器 控制器pings FTP站点(如果向上继续) 循环遍历每个父记录 解析每条记录(这是一个缓慢的过程),将其和所有子数据转换为一个巨大的JSON结构,该结构存储在临时目录中 使用解析任务的进度向用户更新屏幕 通过FTP上传JSON结构 成功上传后,更新记录上的“IsUpload”字段 现在我讨论的所有问题都是保持UI的更新。我正在设计一个简单的UI,其中有一个状态栏,显示每个JSON文件
- 用户转到控制器
- 控制器pings FTP站点(如果向上继续)
- 循环遍历每个父记录
- 解析每条记录(这是一个缓慢的过程),将其和所有子数据转换为一个巨大的JSON结构,该结构存储在临时目录中
- 使用解析任务的进度向用户更新屏幕
- 通过FTP上传JSON结构
- 成功上传后,更新记录上的“IsUpload”字段
NSManagedObjectContext
切换到此控制器,并且我从该objectContext中了解到我可能会引用NSPersistantsStoreCoordinator
并为第二个威胁创建第二个NSManagedObjectContext
,并且我可能会以某种方式同步这些线程
我把performselectornmainthread
和performselectornbackground
调用弄得一团糟
要么我按照自己喜欢的方式工作,要么我的managedObjectContext出现了某种错误,我想也许是时候进行一点重写,而不是试图挽救我所拥有的东西了
有人能告诉我一些关于我应该用什么的想法吗?我似乎无法正确理解多线程核心数据的概念,即我应该使用
NSOperationQueues
GCD还是其他方式来做事情。CoreData能够在多线程环境中运行,只要将托管对象和上下文绑定到其适当的线程/队列。要刮平表面,请参见
您可以通过将其初始化为“专用队列”绑定上下文来创建背景上下文(有关更多详细信息,请参阅)。
基本上,这意味着为了正确使用此上下文,您必须在其上执行包含在上下文
performBlock:
或performBlock和wait:
方法中的代码。您可以使用这些方法将要执行的上下文的“任务”排队(串行执行队列)。
此代码将在后台执行。
您还可以创建一个仅限于特定线程的上下文(
NSConfinementConcurrencyType
),然后只在创建该上下文的线程中访问它,而不使用“执行块”方法。将此上下文中的更改合并到主上下文是通过在初始化后将主上下文设置为上下文的父上下文,或者注册到其“did save”通知并将更改合并到主上下文(第一种方法更容易实现)来完成的。
您的流程的一个解决方案是:
performBlockAndWait:
保存私有上下文和主上下文(以保持操作一致)尝试分段保存,以避免长时间锁定主上下文