将背景提取添加到iOS7应用程序以通过AFNetworking获取Web数据

时间:2014-01-07 22:41:24

标签: ios afnetworking-2

我正在编写一个iOS 7应用程序,它使用AFNetworking和REST Web服务将600个员工记录加载到SQLite数据库中。当应用程序首次加载时,我检查数据库是否退出,如果不存在,则复制空白employee.db,然后调用Web服务并填充数据库。这到目前为止运作良好。

现在我需要添加后台提取服务,以便我可以定期更新数据。如何做到这一点有点不知所措。我知道我需要将这个功能添加到目标中,我已经完成了。需要编写App Delegate方法setMinimumBackgroundFetchInterval。

然后我可以写

performFetchWithCompletionHandler

app delegate中的

方法

调用清除数据库并调用Web服务的方法非常简单。而且我认为它将在30秒内完成。

以下是我的问题:

  1. 有没有办法轻松查看数据是否已更改?我想我可以写一个tmp db然后比较SQL dbs,但这需要花费太多时间吗?也许jt并不重要,如果我每天只检查4次,那么数据几乎可能会发生变化并且只有一点点。

  2. 我担心在完成之前我的方法结束了。如果我的临时数据库没有完成,不想杀死当前的数据库。也许我应该做临时的,只有当我有足够的时间,比如> 1秒,然后删除当前数据库并将temp 1重命名为当前名称。

  3. 当我删除旧数据库并将旧数据库重命名为new时,有没有办法可以防止用户可能访问某些数据的问题?我需要暂停ui或类似的东西,但不知道如何。

  4. 我在这里寻找任何方向或帮助,非常感谢!!!

    布赖恩

1 个答案:

答案 0 :(得分:1)

如果我这样做,我会让服务器发送您要发回的数据的时间戳,以便服务器只需要向您发送自时间戳以来已更改的数据。这将解决您关于如何知道是否有任何变化的第一个问题。

然后我会从您的服务器解析(推测)XML并更新数据库,但最后一步是保存时间戳的那个。

如果iOS在写入时间戳之前终止了您的应用,那么最糟糕的情况是下次同步时它将重新请求数据并尝试重新应用它。

即。不要删除旧的数据库并将其替换为新数据库......以增量方式执行。