2016-04-08 21 views
4

正在做一个NSURLSessionDelegate控制器中的后台URLSession的IOS9应用程序。下面是我如何开始它:URLSession didCompleteWithError无错误

self.session_data = [[NSMutableData alloc] init]; 
    NSURL *url = [NSURL URLWithString:src]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    NSURLSessionConfiguration *backgroundConfigObject = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"myBackgroundSessionIdentifier"]; 
    self.session = [NSURLSession sessionWithConfiguration: backgroundConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]]; 

    self.download = [self.session dataTaskWithRequest: request ]; 
    [self.download resume]; 

到目前为止好。我实施了三种委托方法。 'didReceiveData'首先被调用并且我存储数据。

- (void)URLSession:(NSURLSession *)session 
     dataTask:(NSURLSessionDataTask *)dataTask 
    didReceiveData:(NSData *)data{ 

    NSLog(@"%s",__func__); 
    [self.session_data appendData:data]; 
} 

之后,'didCompleteWithError'被调用。 'completionHandler'处理程序永远不会被调用。

什么令人困惑的'didCompleteWithError'消息是,实际的错误对象是零。我看到了一些类似的未解答的问题。加载时,我不会离开控制器/视图。我是否需要将该功能移入AppDelegate?

+1

有你的.plist设置NSTransport安全? –

+0

那确实解决了它 –

回答

3

苹果的文档说,didCompleteWithError报告只有客户端错误,否则就是零。

“服务器错误,不通过错误参数报告您的代理接收通过误差参数的唯一错误是客户端错误,,如无法解析主机名或连接到主机。“

这是link的文档。

如果要检查其他错误,如会话的错误,你必须实现会话协议委托

- URLSession:didBecomeInvalidWithError: 

有关详细信息,请参阅this答案