我想通过 Web 服务用当前服务器更新我的本地数据库。我知道如何向服务器发送请求并解析 Web 服务输出。问题是,我希望此更新每 24 小时发生一次,无论应用程序是打开还是关闭。我只是想知道它是否可以完成。如果可能的话,谁能告诉我如何做到这一点。
提前谢谢了
我想通过 Web 服务用当前服务器更新我的本地数据库。我知道如何向服务器发送请求并解析 Web 服务输出。问题是,我希望此更新每 24 小时发生一次,无论应用程序是打开还是关闭。我只是想知道它是否可以完成。如果可能的话,谁能告诉我如何做到这一点。
提前谢谢了
仅当您的应用程序打开(前台)时才能完成,使用UILocalNotifications
它可用于在持续时间后触发事件并且您可以更新数据库。
但如果应用程序未打开,您将无法在数据库中执行更改。因为苹果不允许在应用程序处于非活动状态时对数据库进行更改。
检查此链接:如果应用程序处于后台模式,可以使用哪种类型的服务
webservice
在您的数据库中为时间戳创建一个列。
在
- (void)applicationWillEnterForeground:(UIApplication *)application
方法中首次启动时appDelegate
,timestamp
从服务器获取并将其保存在本地DB/Plist
等中。
放入条件,- (void)applicationWillEnterForeground:(UIApplication *)application
当应用程序再次进入前台时,检查local timestamp
和server timestamp
是否有差异,24 hours
开始更新local DB
。server
更新完成后,再次保存timestamp
fromserver
到local
24 小时。
说得通?更新只会application
在foreGround
. 通过这种方式,您local DB
不仅可以在 24 小时内更新,而且可以随时更新。
另一种简单的方法是在file
本地创建一个(任何空文件) 。下次再来时,检查这个文件是否超过24小时。如果是,请从服务器获取数据并重新写入. 这样,您就无法从服务器发送信号来更新本地应用程序数据库。application
foreground
application
foreGround
creation time
file
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.
您不能在后台执行此操作,因为苹果不允许这样做。
您可以在您的应用打开时执行此操作。
当您第一次更新数据库时,您可以将时间戳保存在 NSUserDefaults 中,然后在下次打开应用程序时检查当前时间戳是否大于(24 小时)您之前的时间戳(存储在 NSUserDefaults 中)然后更新您的数据库并更新 NSUserDefaults 中的时间戳。