sendAsynchronousRequest:queue:completionHandler:app在后台运行时失败

时间:2015-05-27 07:06:42

标签: multithreading ios8 grand-central-dispatch reachability sendasynchronousrequest

我正在使用NSURLConnection进行互联网可用性检查,但无法调用成功或错误阻止:

- (void)isNetworkAvailableWithCallBack:(SuccessCallback)successBlock onFailure:(FailureCallback)failureBlock   {
        NSURL *URL = [NSURL URLWithString:@"http://www.google.com/"];
        NSURLRequest *request = [NSURLRequest requestWithURL:URL];
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue new] completionHandler:^(NSURLResponse *response, NSData __unused *data, NSError *error){
            if (response != nil){
                NSLog(@"Connected");
                dispatch_async(dispatch_get_main_queue(), ^{
                    successBlock(YES);
                });
            } else {
                dispatch_async(dispatch_get_main_queue(), ^{
                    failureBlock(YES);
                });
                NSLog(@"Not Connected");
                [self presentError:error];

            }
        }];
    }

当应用处于前台或第一次加载时,应用效果很好。当然,我的后台多任务处理已启用。发生以下情况时会发生此问题:

将应用程序发送给BG。 等一段时间...... 该应用程序被iOS杀死。

当我的应用程序再次从后台到前台时,将使用以下状态代码调用块:

Code=-1001

请求超时错误。但是为什么每当我的应用程序进入后台时都不会调用它(不是每次都发生,它运行正常)。

我的代码有什么问题吗?以及我如何处理这个问题。?

1 个答案:

答案 0 :(得分:0)

您需要在功能中启用“项目背景模式”。

请参阅随附的屏幕截图

enter image description here