我想通过Web服务使用当前服务器更新本地数据库。我知道如何向服务器发送请求并解析Web服务输出。问题是,我希望每24小时更新一次,无论应用程序是打开还是关闭。我只是想知道它是否可以完成。如果可能,任何人都可以告诉我如何做到这一点。
非常感谢提前
答案 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 timestamp
和server timestamp
是否有24 hours
的差异,开始更新local DB
server
。完成更新后,请在接下来的24小时内再次将timestamp
从server
保存到local
。
有道理吗?只有在application
到达foreGround
时才会开始更新。通过这种方式,您不仅可以在24小时内随时更新local DB
,还可以随时更新。{/ p>
另一种简单的方法是在file
到达application
时在本地创建foreground
(任何空文件)。当下次application
到foreGround
时,请检查此文件的creation time
是否超过24小时。如果是,请从服务器获取数据并重新编写file
。这样您就无法从服务器发送信号来更新本地应用程序数据库。
答案 2 :(得分:0)
你不能在后台执行此操作,因为苹果不允许这样做。
您可以在应用程序打开时执行此操作。
第一次更新数据库时,可以将时间戳保存在NSUserDefaults中,然后下次应用程序打开时检查当前时间戳是否大于上一个时间戳(存储在NSUserDefaults中)的24小时,然后更新您的数据库并更新NSUserDefaults中的时间戳。
答案 3 :(得分:0)
不。 Apple不会允许它。
这应该是尽力保持更新的最佳方式,没有确定的方式,用户将下载你的东西,应用程序将保持在前台,他的3G覆盖是好的(看着你,T-Mobile等等。
如果您正在处理应该偶尔更新的静态内容,请保留您在设备中更新的最后日期(NSUserDefaults
),并在用户启动应用时,询问服务器“嘿兄弟,上次我更新了这个NSDate
,你有什么事给我?”然后相应地执行更新。