启动时从应用程序轮询外部服务器
Posted
技术标签:
【中文标题】启动时从应用程序轮询外部服务器【英文标题】:polling an external server from an app when it is launched 【发布时间】:2011-09-09 20:42:40 【问题描述】:我是 ios 新手,正在开发一个在真实设备 (iPad) 上运行的应用程序。因此,当我在视图可见后在 iPad 上启动我的应用程序时,该应用程序应该能够轮询 Web 服务器或其他东西(无需任何用户交互)并通过 HTTP 获取一些信息,并基于此信息,我想填写一些文本应用视图中的字段。你能告诉我是否可以在iOS中做这样的事情吗?如果是这样,将不胜感激如何和一些示例代码。
谢谢。
【问题讨论】:
【参考方案1】:您可以使用 viewWillAppear 或 viewDidLoad 中的 NSURLConnection 通过 http 下载信息。如果使用 NSXMLParser(或任何其他适用于 iOS 的 XML 解析器)进行 XML 解析,则下载数据后。
//Lets say you have download and process method
- (void)downloadAndProcess
//URL you want to download Info from
NSURL* url = [NSURL URLWithString:@"http://google.com"];
//Make a mutable url request
NSMutableURLRequest* req = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
NSURLConnection* conn = [NSURLConnection connectionWithRequest:req delegate:self];
if(conn)
//NSMutableData receivedData is an instance variable
receivedData = [[NSMutableData alloc] init];
//NSURLConnection Delegate methods here
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
[receivedData setLength:0];
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
[receivedData appendData:data];
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
NSLog(@"Error downloading data :%@",[error localizedDescription]);
// release receivedData object when connection fails
[receivedData release],receivedData = nil;
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
// Connection did finish downloading data which you can process based on what your data is
// release receivedData object once you are done processing it.
[receivedData release],receivedData = nil;
【讨论】:
感谢回复,viewWillAppear 和 viewDidLoad 这两个方法实际上都是在应用准备好进行用户交互之前调用的。但是有没有办法在加载特定视图(我们实际上可以在设备中看到应用程序视图)并准备好进行用户交互时启动此过程。因此,当这个特定视图加载到应用程序中时,它总是会轮询信息并不断更新页面上的字段。如果我错误地解释了你的答案,请纠正我。 如果您在 ViewController B 中(您的应用在 Nvigation 控制器上加载了视图控制器 A、B、C,其中 A 是导航控制器的根视图控制器。从 A 他们可以导航到 B 和 C,他们可以从 B 或 C 导航回 A。)如果 B 视图控制器已加载到导航控制器上,您是否要开始轮询,无论当前视图用户是否正在查看 A 或 C ?这就是你想要的 不,考虑一下我启动我的应用程序的场景,第一个(根)视图是 A 现在我想在此轮询操作用户可以转到 B、C 之后轮询信息......并且无论何时他回到A,我必须再次轮询此信息。对不起,如果我让你感到困惑 在 viewWillAppear 的视图控制器 A 中实现上述代码,即 [self downloadAndProcess];,当 NSURLConnection 从您的服务器下载然后我们正在处理它时...在此期间显示一些活动指示器屏幕显示某些活动正在进行中,用户必须等到完成才能进一步转到 B 或 C vc's。以上是关于启动时从应用程序轮询外部服务器的主要内容,如果未能解决你的问题,请参考以下文章