Contado automático de referencia: puntero al tipo no converst 'nserror *' sin propiedad explícita
-
25-10-2019 - |
Pregunta
Al actualizar parte de mi código para ser compatible con el iOS 5 SDK, intenté refactorizar mi código usando "Convertir a Objective-C Arc" en XCode y recibí un error. El error ocurre en una variable de instancia en mi archivo .h.
NSError **_error;
El error dice "Puntero al tipo de no const 'nserror *' sin propiedad explícita". ¿Cómo podría arreglar esto?
Solución
Al almacenar NSError
Objetos En una variable de instancia, debe declararlo como un puntero simple:
@interface Foo : NSObject
{
NSError *_errror;
}
NSError **
solo se usa para regresar indirectamente NSError
objetos de un método a la persona que llama. Es (probablemente) un error almacenarlo en una variable de instancia.
Otros consejos
Puede usar uno de los clasificatorios de por vida descritos en el Transición a las notas de lanzamiento de arco
Para nserror ** usaría __autoreleing, por lo que el ejemplo proporcionado por Nikolai se vería así
@interface Foo : NSObject
{
NSError * __autoreleasing *error;
}
La sintaxis es un poco extraña y debes seguir el consejo de Nikolais, pero si estás seguro de que Nserror ** es lo que quieres que esto debería funcionar.