使用 Web 服务获取 CoreData 背景?
Posted
技术标签:
【中文标题】使用 Web 服务获取 CoreData 背景?【英文标题】:CoreData Background Fetch with Webservice? 【发布时间】:2016-01-10 01:27:03 【问题描述】:我想在后台更新我设备上的一些数据。例如:
我会得到一个 web 服务,它会返回一些我需要存储到我的核心数据中的更改。所以我的目标是用 Alamofire 加载 JSON 数据,遍历我所有的 json 对象,并将它们存储到我的数据库中。当一切都完成后,我想更新我的 UI。
更改可能有数百行,所以我想在后台线程上执行此操作。生病时使用:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
var context = appDel.managedObjectContext
do
tasks = try context.executeFetchRequest(fetchRequest) as! [Tasks]
catch
fatalError("Fetching from the store failed")
for task in tasks
// check something here, or set some new values
// save them in background? But how do i know if save is completed?
dispatch_async(dispatch_get_main_queue())
// update my UI
);
这一切会在后台运行,还是我需要多个上下文?我会在其他地方读到,当我在线程中加载我的 managedObjectContext 时,整个 Fetch 在后台运行。我怎么知道我的上下文何时完成保存,以便我可以刷新我的 UITableView?
提前致谢!
【问题讨论】:
你不是指 ios 7Background Fetch
对吧?
【参考方案1】:
你应该在context.performBlock
而不是dispatch_async
中执行后台代码
完成后致电completionHandler(.NewData)
【讨论】:
感谢您的回答。所以如果我在街区内,一切都在后台运行吗?我的 Web 服务请求已经在后台运行,我可以在 dispatch_async 中创建一个 performBlock 吗? 是的 - 在后台运行代码,在与您的托管对象上下文关联的队列上 - 这在处理核心数据时是必要的。 (dispatch_async
将使用不同的队列,这会导致您的应用在尝试访问 Core Data 对象时崩溃)以上是关于使用 Web 服务获取 CoreData 背景?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 3.0 将 CoreData 保存到 Web 服务器
使用 CoreData 时 RestKit 没有正确映射属性