我正在编写一个iPad应用程序,它从Web服务器上的XML文件中提取各种坐标,解析信息并在屏幕上呈现它们。
我想知道你是否有任何关于如何让它连续刷新数据的提示/建议,比如每秒(因为计算机程序每隔几秒更新一次服务器上的XML文件)。谢谢!
答案 0 :(得分:2)
您肯定需要为此实现多线程后台操作,否则您的应用将完全没有响应。在我继续之前,我必须指出,不断查询服务器以获取应用程序的整个执行情况是一个坏主意,它不仅会咀嚼数据,而且必须让Wi-Fi / 3G / 4G天线保持不变,这将耗尽用户的电池快得多。
我会考虑放宽每10秒钟左右拉下数据的要求(因为服务器每隔几秒就会更新一次,你必须考虑下载和渲染当前抓取的数据的时间),甚至等待用户按下刷新按钮等。
要回答这个问题,有几种方法可以做到这一点,其中最简单的方法可能就是使用类似ASHTTPRequest的框架(虽然不再维护,但对于现代项目来说,像{{3}这样的库}})。它们处理来自服务器的异步数据下载以及许多其他有用的网络功能。
满足您要求的理想流程如下:
performSelectorOnMainThread
或同等的!)希望有所帮助!如果你不想包含一个外部库,我确实有一个小的示例项目,它创建一个子类NSOperation的实例,它执行NSURLConnection,将它们发送到NSOperationQueue并同时执行它们。您可以轻松地将其修改为一次只执行1个操作,更改NSURLConnection以下载和解析服务器数据,然后更新主线程。 AFNetworking如果你有兴趣的话。
答案 1 :(得分:2)
查看NSTimer
及其scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
方法
工作解决方案可能是
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:refreshData userInfo: nil repeats:YES ]
和调用对象上的方法
-(void) refreshData {
//Do your call here
}
答案 2 :(得分:0)
在服务器上准备好新数据时,请考虑向设备发出推送通知。
这样可以节省设备电量,节省服务器负载的TON,推送通常只需要一秒钟左右即可到达,因此您的使用延迟也不错。
唯一需要注意的是,如果用户拒绝允许推送通知,您还必须实施某种轮询。但是对于他们来说,你可以拥有很好的长轮询周期,并告诉他们如果他们启用推送支持,刷新速度会快得多......