我试图更新旧的应用程序以从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