如何在目标c中每24小时更新一次应用程序

时间:2013-07-19 06:29:54

标签: iphone ios objective-c grand-central-dispatch

我想通过Web服务使用当前服务器更新本地数据库。我知道如何向服务器发送请求并解析Web服务输出。问题是,我希望每24小时更新一次,无论应用程序是打开还是关闭。我只是想知道它是否可以完成。如果可能,任何人都可以告诉我如何做到这一点。

非常感谢提前

4 个答案:

答案 0 :(得分:3)

只有当您的应用程序处于打开状态(前景)时才可以使用UILocalNotifications来执行此操作,该{{1}}可用于在一段时间后触发事件并且您可以更新数据库。

但是如果app未打开,则无法在数据库中执行更改。因为当应用程序处于非活动状态时,apple不允许在数据库中进行更改。

点击此链接:Which type of services can be used if app is in background mode

答案 1 :(得分:2)

  • webservice数据库中为时间戳创建一列。

  • 首次在里面发射 - (void)applicationWillEnterForeground:(UIApplication *)application中的appDelegate方法,从服务器获取timestamp并将其保存在本地DB/Plist等。

  • - (void)applicationWillEnterForeground:(UIApplication *)application中添加条件,当应用程序再次到达前台时,检查local timestampserver timestamp是否有24 hours的差异,开始更新local DB server。完成更新后,请在接下来的24小时内再次将timestampserver保存到local

有道理吗?只有在application到达foreGround时才会开始更新。通过这种方式,您不仅可以在24小时内随时更新local DB,还可以随时更新。{/ p>

另一种简单的方法是在file到达application时在本地创建foreground(任何空文件)。当下次applicationforeGround时,请检查此文件的creation time是否超过24小时。如果是,请从服务器获取数据并重新编写file。这样您就无法从服务器发送信号来更新本地应用程序数据库。

答案 2 :(得分:0)

你不能在后台执行此操作,因为苹果不允许这样做。

您可以在应用程序打开时执行此操作。

第一次更新数据库时,可以将时间戳保存在NSUserDefaults中,然后下次应用程序打开时检查当前时间戳是否大于上一个时间戳(存储在NSUserDefaults中)的24小时,然后更新您的数据库并更新NSUserDefaults中的时间戳。

答案 3 :(得分:0)

不。 Apple不会允许它。

这应该是尽力保持更新的最佳方式,没有确定的方式,用户将下载你的东西,应用程序将保持在前台,他的3G覆盖是好的(看着你,T-Mobile等等。

如果您正在处理应该偶尔更新的静态内容,请保留您在设备中更新的最后日期(NSUserDefaults),并在用户启动应用时,询问服务器“嘿兄弟,上次我更新了这个NSDate,你有什么事给我?”然后相应地执行更新。