2016-04-08 20 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答案