0

因此,我在 xcode 中编写与不同服务器上的数据库同步的程序,但要更新的信息取决于上次同步的日期。保存“dateLastSynced”时间戳的最佳方法是什么,以便当我打开程序时它可以自动同步日期戳之后发生的更改?

4

1 回答 1

1

清楚[NSDate date]地为您获取格式的当前日期NSDate,但如果您将其记录在 SQLite 数据库中,您还可以使用适当的SQLite 日期和时间函数,例如SELECT datetime();.

但是,如果您使用此时间戳作为您在远程 Web 服务请求中使用的参数(即服务器将检查它自己的内部时钟和时间戳记录的时间戳),我建议您不要使用您的本地时钟。dateLastSynced从您从该服务器收到的时间戳确定,根本不使用您的本地时钟。实际上,您让 Web 服务器的时间戳机制管理该过程。因此,您将从远程服务器获取适当的时间戳字段并将其存储在数据库的dateLastSynced时间戳中。关键是,您不希望时钟的轻微错误调整(或更糟糕的是,马虎的时区管理)对您的同步逻辑产生不利影响。

就个人而言,当我协调远程数据库和本地数据库之间的同步时,我通常在本地数据库中有一个单行表用于配置信息,并且我将这个基于服务器的时间戳存储在那里。您当然可以使用NSUserDefaults(请参阅Preferences and Settings Programming Guide)或 plist 或其他任何东西,但我个人将此同步时间戳视为本地数据库状态的属性,因此我觉得将其保留在那里更舒服。如果您将其保留在其他地方,请考虑其他可能更新您的数据库的过程(例如,当用户使用新的/修改的数据结构将其应用程序更新到 2.0 版时,您的迁移计划是什么)。

所以,无论如何,我个人会将数据库同步信息保存在数据库本身中,即使拥有那一行配置表感觉很傻。(顺便说一句,我也倾向于在我的配置表中包含应用程序/数据库版本号等字段。)

于 2012-11-23T16:12:43.673 回答