iOS - API 同步

iOS - API Synchronization

我正在 iOS 开发一个玩具应用,用户可以:

所有这些都使用 Core Data 实现持久化,使用 Alamofire 实现网络,编码为 Swift。

我通常为这个流程做的是:

  1. 上传新任务
  2. 从上游下载更改
  3. 同步本地编辑的任务

这需要串行执行所有这些任务,但 Alamofire 显然不执行同步请求。我是 iOS 编程的新手,我已经阅读了一些关于 GCD 的内容,但我不确定我应该如何继续。

用直截了当的问题来解决这个问题:

  1. 同步流程是否正确?
  2. 我应该使用 GCD 吗?如果是,怎么做?
  3. 关于如何正确执行此操作的任何建议?

这就是我的做法(假设您可以更改服务器代码):

首先,将本地 "sync date" 存储在应用程序的某个位置。然后,对于每个任务,存储一个修改日期。每当修改任务时,将修改日期设置为当前日期。然后当你想与服务器同步时:

  1. 将"sync date"之后修改的所有任务上传到服务器。另外,将 "sync date" 发送到服务器。
  2. 服务器响应所有修改日期在指定同步日期之后的任务。
  3. 服务器然后检查上传的项目并保存它们。
  4. 然后应用程序保存从服务器下载的所有任务,根据需要创建新任务或更新现有任务...
  5. 该应用程序然后遍历从服务器返回的所有项目,寻找最新的修改日期。如果最新修改日期晚于应用程序的 "sync date",则将 "sync date" 设置为最新修改日期。

为了删除任务,我在每个任务上都有一个 "deleted" 标志。当一个任务被删除时,它的 "deleted" 标志被设置为 true。它仍然会同步到服务器,但是如果从服务器下载任务并设置了 "deleted" 标志,它应该从数据库中删除...

GCD

至于 GCD,看起来 Alamofire 库会为您处理所有这些,因此您不需要使用它。如果你确实想使用它,那很简单:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND), ^{

    // This code will run in the background, so it doesn't matter
    // how long it takes, it won't freeze the app...

});

dispatch_async(dispatch_get_main_queue(), ^{

    // This code will run on the main thread...

});

它还有更多功能...