当应用程序在后台时,如何在iOS应用程序中获取Web服务响应?

时间:2014-06-26 10:15:19

标签: ios cocoa-touch background nsurlconnection nsurlsession

我正在开发一个iOS应用程序,我在NSURLConnection使用Restful Web服务,当我调用web服务时,在调用web服务后按主页按钮然后应用程序进入后台并且没有得到响应在背景中。在我的应用程序中,即使应用程序处于后台状态,响应也应该得到响应。

所以请为此建议任何合适的答案。

我应该使用NSURLSession吗?

2 个答案:

答案 0 :(得分:0)

NSURL *myURL = [NSURL URLWithString:@""]; // set your url here
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDownloadTask *getTask = [session downloadTaskWithURL:myURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
    // do stuff with the result
}];

// don't forget to start your task 
[getTask resume];

这是您可能想要的一个很好的教程: http://www.raywenderlich.com/51127/nsurlsession-tutorial

答案 1 :(得分:-1)

使用UIBackgroundTaskIdentifier,类似这样的

  • (void)applicationDidEnterBackground:(UIApplication *)application {

    //启动后台服务并每10秒获取一次数据 [self runBackgroundTask:10]; }

  • (void)runBackgroundTask:(int)time {

    UIApplication * app; app = [UIApplication sharedApplication]; //检查应用程序是否处于后台模式 if([UIApplication sharedApplication] .applicationState == UIApplicationStateBackground){

    //create UIBackgroundTaskIdentifier and create tackground task, which starts after time
    __block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
         [app endBackgroundTask:bgTask];
         bgTask = UIBackgroundTaskInvalid;
    }];
    
    dispatch_async(dispatch_get_main_queue(), ^{
        NSTimer *refreshTimer = [NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(doRefresh) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSDefaultRunLoopMode];
    
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
    

    } }

doRefresh - 这是您提供Web服务的方法