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:
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?