我試圖更新舊的應用程序以從NSURLConnection移動到NSURLSession。一切工作正常,當我用塊NSURLSession:不調用NSURLSession委託方法
NSURLSessionDataTask *dataTask = [session
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {}
但有時我需要分析的數據應用從服務器接收,所以我需要didReceiveResponse和didReceiveData方法,類似於NSURLConnection的使用的那些。我試圖做這樣的:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration
delegate:self
delegateQueue:nil];
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.apple.com"]];
[dataTask resume];
但是我的代表從來不被稱爲:
- (void)URLSession:(NSURLSession *)session
NSURLSessionTaskDelegatedidReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
{
NSLog(@"-----------------------> NSURLSessionTaskDelegatedidReceiveResponse");
completionHandler(NSURLSessionResponseAllow);
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
NSLog(@"----------------> didReceiveData");
}
當我試圖使用其它類型的任務(NSURLSessionDownloadTask例如)
同樣的事情發生,他們的代表從未被召喚。我實際上可以在調試器中看到任務正在切換到運行狀態,但我永遠無法獲得對代表的任何調用。 在我的頭文件我做我的順應到的ViewController代表:
@interface ViewController : UIViewController <NSURLSessionDelegate, NSURLSessionDataDelegate, NSURLSessionTaskDelegate>
我做了相當多的搜索,但即使我只要我努力嘗試從網絡,他們只是停止工作的一些工作實例將它們粘貼到我的項目中。例如this tutorial對我來說是完美的(我必須將傳輸安全權限添加到plist文件,但這就是它)。但是當我試圖在我的項目中使用這些代碼時,委託不會被調用。而當我實際上將我的代碼粘貼到另一個簡單的應用程序時,它工作得很好。所以我的項目設置可能有問題?你能告訴我什麼可能導致這樣的事情?我現在完全不知所措。
你看到這一點:http://stackoverflow.com/questions/21200521/nsurlsession-delegate-methods-not-called ? – Koen
不幸的是,我的問題與URL無關。我試圖使用一些不同的東西,最初我通過[session dataTaskWithRequest:request]使用之前用過NSURLConnection的URL; (它當然是用https://)。 – Evgeny