ios - 使用 Web 服务获取 CoreData 后台?

标签 ios swift core-data

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

我将获得一个网络服务,它会返回一些我需要存储到我的核心数据中的更改。所以我的目标是使用 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?

提前致谢!

最佳答案

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

    中执行后台代码
  2. 完成后调用 completionHandler(.NewData)

关于ios - 使用 Web 服务获取 CoreData 后台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34701002/

相关文章:

swift - 升级我的应用程序以包含预填充的数据

ios - 如何避免在iOS中使用Facebook SDK出现 "Duplicate status message"错误?

iOS 8 SDK 更新后 Ios 应用奇怪的旋转行为

ios - 快速捕获无效用户输入的异常

ios - UIPickerView - 第一行选择不调用 didSelectRow(在 Swift 中)

ios - Swift 2.2 字符串文字选择器

ios - 核心数据: Null Array when retrieving Data Base objects

ios - NSFetchedResultsController:在后台线程中获取

iOS Core 蓝牙在蓝牙设备连接时通知应用程序

ios - CAGradientLayer 无法正常工作