使用Webservice获取CoreData背景?

时间:2016-01-10 01:27:04

标签: ios swift core-data

我想在后台更新设备上的一些数据。例如:

我得到了一个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?

提前致谢!

1 个答案:

答案 0 :(得分:2)

  1. 您应该在context.performBlock {}而不是dispatch_async

  2. 中执行后台代码
  3. 完成后致电completionHandler(.NewData)