4

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

提前谢谢了

4

4 回答 4

3

仅当您的应用程序打开(前台)时才能完成,使用UILocalNotifications它可用于在持续时间后触发事件并且您可以更新数据库。

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

检查此链接:如果应用程序处于后台模式,可以使用哪种类型的服务

于 2013-07-19T06:48:37.357 回答
2
  • webservice在您的数据库中为时间戳创建一个列。

  • - (void)applicationWillEnterForeground:(UIApplication *)application方法中首次启动时appDelegatetimestamp从服务器获取并将其保存在本地DB/Plist等中。

  • 放入条件,- (void)applicationWillEnterForeground:(UIApplication *)application当应用程序再次进入前台时,检查local timestampserver timestamp是否有差异,24 hours开始更新local DBserver更新完成后,再次保存timestampfromserverlocal24 小时。

说得通?更新只会applicationforeGround. 通过这种方式,您local DB不仅可以在 24 小时内更新,而且可以随时更新。

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

于 2013-07-19T07:23:25.757 回答
0

Nope. Apple won't allow it.

It should be done as a best-effort to try to keep updated, there's no sure-fire way that the user will download your stuff, that the app will be kept in foreground, that his 3G coverage is good (looking at you, T-Mobile), etc.

If you're dealing with static content that should be updated once in a while, then keep the last date you updated in the device (NSUserDefaults comes to mind), and when the user launches the app, ask the server "Hey bro, last time I updated was this NSDate, do you got anything for me?" And then perform the update accordingly.

于 2013-07-19T07:11:20.917 回答
0

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

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

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

于 2013-07-19T07:01:49.670 回答