2012-02-08 8 views
5

Desde que he añadido esta solicitud asíncrona , estoy recibiendo un error de Xcode Sending 'NSError *const __strong *' to parameter of type 'NSError *__autoreleasing *' changes retain/release properties of pointertipos ios NSError

... 
[NSURLConnection sendAsynchronousRequest:req queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLData:data error:&error]; 
     ... 
    }); 
}]; 
... 

Si uso entonces mi código funciona muy bien, pero me siento incómodo por no usando errores ... ¿Qué debería hacer?

+0

Si no está haciendo nada con el error, también puede pasar NULO. Por lo general, puede detectar si se ha producido un error porque el método arroja un valor nulo, por lo que no es como si se estuviera perdiendo el hecho de que están ocurriendo errores. –

Respuesta

11

Presumiblemente es porque está reutilizando el error que le pasó en el controlador de finalización. Se pasará como __strong y luego lo pasa donde se requiere que sea __autoreleasing. Intente cambiar a este código: sucede

error
... 
[NSURLConnection sendAsynchronousRequest:req queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSError *error2 = nil; 
     NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLData:data error:&error2]; 
     ... 
    }); 
}]; 
... 
2

Este Xcode cuando se ponen NSError *error=nil; definición fuera del^bloque.

Dentro del bloque, entonces error:&error funciona bien.

Cuestiones relacionadas