启动时从应用程序轮询外部服务器

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。

以上是关于启动时从应用程序轮询外部服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .NET 应用程序收集探查器数据

在应用程序启动时从情节提要中选择替代的第一个视图控制器

登录时从另一个活动启动应用程序

等待位置数据时从服务器获取数据的功能放置在哪里

如何在应用程序启动时从 java 代码更改 Hibernate connection.url 属性

需要从外部服务器进行实时轮询的网站架构设计