我有NSURLSession
的下面的實現。NSURLSession委託didCompleteWithError未調用
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
self.session = [NSURLSession sessionWithConfiguration:configuration
delegate:self
delegateQueue: nil];
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request];
[task resume];
while(!finished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100000]];
}
,我已經實施了下面委託methds:
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)aresponse
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didCompleteWithError:(NSError *)error
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition,
NSURLCredential *credential))completionHandler
「未完成」爲while循環的上方時,接收的didCompleteWithError
委託時表示有象網絡中的一些問題設置爲1可變下降等...
當網絡出現故障時,我沒有得到didCompleteWithErrorcallback
,因此while循環不會退出,即使指定了10秒超時並且我的應用程序崩潰了內存警告。
我確實收到了didReceiveData,didReceiveResponse回調在所有情況下.have沒有檢查didReceiveChallenge回調,但因爲它需要在這裏設置HTTPs。
所以,我有以下幾個問題要問,如果你能幫助我:
1)爲什麼didCompleteWithError
回調當網絡出現故障沒有收到?
2)考慮到沒有網絡問題,是didCompleteWithError
成功完成任務時收到的回調函數?如果不是,回調函數會表示完成任務,如connectionDidFinishLoading
使用NSURLConnection
的時候?
我在啓動任務時在請求參數中使用了cachepolicy。是否因爲這樣,didcompletewitherror不是叫做n而是應該實施緩存委託?
夥計們,請幫忙。我被卡住了。
三江源
請勿觸摸運行循環,除非項目是沒有隱式運行循環的命令行界面 – vadian
其他委託方法如何?當網絡中沒有出現故障時他們會被叫到嗎? –
好的。我明白了你的觀點。但爲什麼我的委託方法不被調用?你能提出什麼建議嗎? – CodeTry