Contado automático de referencia: puntero al tipo no converst 'nserror *' sin propiedad explícita

StackOverflow https://stackoverflow.com/questions/7804435

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top