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