2012-01-14 27 views
10

Estoy trabajando en un proyecto que usa ARC y estoy teniendo problemas con un código existente que ya tenía.conversión implícita de un puntero indirecto a un puntero de objetivo-c con ARC

aquí está el código:

- (id)initWithError:(NSError **)error 
{ 
    if ((self = [super init])) 
    { 
     errorPointer = error; //Getting error here 
    } 

    return self; 
} 

Im que consigue un error que dice:

conversión implícita de un puntero indirecto a un puntero de Objective-C a 'NSError' no está permitido con ARC.

¿Qué debo hacer para solucionar este problema? Intenté hacer un reparto puenteado, pero no funcionó. Se agradece cualquier ayuda.

Ah, y sólo para aclarar, en el archivo .h así es como lo ha declarado la variable errorPointer:

NSError * errorPointer;

Gracias!

Respuesta

9

Debe ser

errorPointer = *error; // no error here 

Las dos variables difieren en un nivel de indirección (simplemente hablando, el número de estrellas en su declaración no es el mismo). Debe agregar un * al frente del error para compensar el * adicional del errorPointer.

+2

¿No debería ser 'errorPointer = * error;'? – UIAdam

+0

@ AdamW ¡Absolutamente, estás en lo correcto! Me confundí por el nombramiento. ¡Gracias! – dasblinkenlight

+0

¡Muchas gracias! ¡eso resolvió el problema! –

1

errorEl puntero y el error tienen tipos que no coinciden.

Según el código que tiene allí, parece que su argumento error solo debe declararse como NSError *.

+0

Solo para expandir ligeramente, la única razón para usar un argumento de indirección doble ('NSError **') sería si necesitara asignar el error dentro de ese método init y tenerlo disponible para la persona que llama. – UIAdam

+0

Sí, y ese es un patrón común en los métodos Cocoa. Muchos métodos de la estructura de Cocoa devuelven un error (si corresponde) a través del argumento 'NSError *' pasado por referencia al método. –

+0

@AndrewMadsen Claro ... pero en este caso no es evidente que él quiera hacer eso, de ahí mi sugerencia de simplemente cambiar el tipo de argumento. – UIAdam

Cuestiones relacionadas