responsedata how example consuming ios objective-c delegates nsurlconnection nsurlsession

how - rest swift ios



NSURLSession delegate vs. completionHandler (1)

Si desea agregar una clase de delegado personalizada, debe implementar los protocolos NSURLSessionDataDelegate y NSURLSessionTaskDelegate como mínimo.

Con los métodos:

NSURLSessionDataDelegate: obtenga un estado continuo de su solicitud

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { receivedData=nil; receivedData=[[NSMutableData alloc] init]; [receivedData setLength:0]; completionHandler(NSURLSessionResponseAllow); }

NSURLSessionDataDelegate

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { [receivedData appendData:data]; }

NSURLSessionTaskDelegate

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if (error) { // Handle error } else { NSDictionary* response=(NSDictionary*)[NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&tempError]; // perform operations for the NSDictionary response }

Si desea separar el código de delegado (capa intermedia) de su clase de llamada (generalmente es una buena práctica tener una clase / capa separada para las llamadas de red), el delegado de NSURLSession debe ser: -

NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:myCustomDelegateClass delegateQueue:nil];

Ref Links:

  1. Referencia de la clase NSURLSession
  2. Ejemplo de sesión NSURLS de iOS (HTTP GET, POST, Downlods de fondo)
  3. De NSURLConnection a NSURLSession

Siempre he usado controladores de finalización. Con NSURLConnection y ahora con NSURLSession . Ha llevado a que mi código sea realmente desordenado, especialmente solicito a pedido.

Quise probar el uso de delegados en NSURLSession para implementar algo que he hecho NSURLConnection con NSURLConnection .

Así que creé una NSURLSession y creé una dataTask :

NSURLSessionDataTask *dataTask = [overallSession dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if(error == nil) { NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; NSLog(@"Data = %@",text); } }]; [dataTask resume];

En este momento tengo un completionHandler de completionHandler para la respuesta, ¿cómo cambiaría a los delegados para gestionar la respuesta y los datos? ¿Y puedo agregar otra dataTask del delegado de esta? ¿Usando las cookies que este dataTask creó y colocó en la sesión?