J'essaie de mettre à jour une ancienne application pour passer de NSURLConnection à NSURLSession. Tout fonctionne très bien quand j'utilise des blocs pour NSURLSession:Les méthodes de délégué NSURLSession ne sont pas appelées
NSURLSessionDataTask *dataTask = [session
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {}
Mais parfois, je dois analyser les données que l'application reçoit du serveur, donc j'ai besoin des méthodes didReceiveResponse et didReceiveData, semblables à ceux utilisés avec NSURLConnection. Je suis en train de le faire comme ceci:
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];
Mais mes délégués ne sont jamais appelés:
- (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");
}
Même chose quand je suis en train d'utiliser d'autres types de tâches (NSURLSessionDownloadTask par exemple) , leurs délégués ne sont jamais appelés. Je peux réellement voir dans le débogueur que les tâches passent à l'état en cours, mais je ne peux jamais recevoir d'appels aux délégués. Dans mon fichier d'en-tête, je ne vous conformez mon ViewController aux délégués:
@interface ViewController : UIViewController <NSURLSessionDelegate, NSURLSessionDataDelegate, NSURLSessionTaskDelegate>
je l'ai fait un peu de recherche, mais même quand je suis en train quelques exemples de travail à partir du Web, ils cesseront de fonctionner dès que je tente de Collez-les dans mon projet. Par exemple this tutorial fonctionne parfaitement pour moi (je dois ajouter des permissions de sécurité de transport au fichier de plist, mais c'est à peu près tout). Mais lorsque j'essaie d'utiliser ce code dans mon projet, les délégués ne sont jamais appelés. Et quand je colle mon code à une autre application simple, ça marche très bien. Donc, quelque chose ne va probablement pas avec les paramètres de mon projet? Pourriez-vous s'il vous plaît me montrer ce qui peut causer quelque chose comme ça? Je suis complètement désorienté en ce moment.
Avez-vous vu ceci: http://stackoverflow.com/questions/21200521/nsurlsession-delegate-methods-not-called ? – Koen
Malheureusement, mon problème n'est pas lié à l'URL. J'ai essayé d'en utiliser quelques unes différentes, et au début j'utilisais l'URL qui était utilisée auparavant avec mon NSURLConnection via [session dataTaskWithRequest: request]; (c'était bien sûr avec https: //). – Evgeny