我想在后台更新设备上的一些数据。例如:
我得到了一个web服务,它返回了我需要存储到我的核心数据中的一些更改。所以我的目标是使用Alamofire加载JSON数据,遍历所有json对象,并将它们存储到我的数据库中。一切都完成后,我想更新我的用户界面。
更改可能是几百行,所以我想在后台线程上执行此操作。生病时使用:
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?
提前致谢!
答案 0 :(得分:2)
您应该在context.performBlock {}
而不是dispatch_async
完成后致电completionHandler(.NewData)