在iOS目标C中从前台转换为后台后继续webservice调用

时间:2015-10-15 05:20:16

标签: ios transition

假设我在应用程序处于前台时调用Web服务。现在,如果用户将应用程序发送到后台,那么如何确保此Web服务调用在后台继续执行。

这是我在我的应用中使用的一段代码。

Login* login = [[Login alloc]init];
[login initiateSignInProcess];
  

initiateSignInProcess有4个网络服务电话。他们很正常   功能。我正在使用AFNetworking

如果任何服务失败,我会再次调用它,延迟下面的afnetworking代码的失败块: -

failure:^(AFHTTPRequestOperation *operation, NSError *error)
         {
[self performSelector:@selector(getUserId)  withObject:nil afterDelay:5];
}

现在我想知道如果用户将应用程序发送到后台,那么代码将如何执行?它会在bakcground中调用此函数直到成功吗?

4 个答案:

答案 0 :(得分:5)

最好使用后台进程进行获取。这是解决方案[http://code.tutsplus.com/tutorials/ios-7-sdk-working-with-background-fetch--mobile-20520

的精彩教程

答案 1 :(得分:1)

在iOS6.x或更低版本中不可用,除非您的应用程序有特定要求在像地点,Voip,音乐等背景中运行...

然而,iOS7可以实现这一点,请考虑一下这个

http://redth.codes/ios7-recipe-background-fetching/

答案 2 :(得分:1)

    **For(large FIle Downloade use Asynchronous Method)** 

       NSURL *myUrl = [NSURL URLWithString:@"Enter URL HERE"];
       NSURLRequest *myRequest = [NSURLRequest requestWithURL:myUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
       NSMutableData *myData = [[NSMutableData alloc] initWithLength:0];
       NSURLConnection *myConnection = [[NSURLConnection alloc] initWithRequest:myRequest delegate:self startImmediately:YES];

    **For(Small FIle Downloade use Synchronous Method)**
       NSURL *myUrl = [NSURL URLWithString:@"Enter URl HERE"];
       NSData *myData = [NSData dataWithContentsOfURL:myUrl];
       UIImage *img = [UIImage imageWithData:myData];

       add NSURLConnection Delegate in .h File

        - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
        [myData setLength:0];
        }

        - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        [myData appendData:data];
        }

        - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        [connection release];
        }

        - (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        [connection release];

        //download finished - data is available in myData.
        }

答案 3 :(得分:0)

这取决于操作系统调度是否允许继续在后台运行服务或将其终止。

最好使用背景提取。这是很好的教程http://code.tutsplus.com/tutorials/ios-7-sdk-working-with-background-fetch--mobile-20520

希望这可以解决您的问题。