Problema de variable durante la transición de iOS 4 a iOS 5 + ARC: "Pasando la dirección de un objeto no local al parámetro _autoreleasing para reescritura"

La forma "antigua" en la que estaba haciendo esto en iOS 4 era declarando el objeto en el archivo de encabezado y pasando el objeto para que se escribiera para manejar un parámetro de error.

NSError *error;

Por razones más allá de mi conocimiento limitado, no pude continuar este patrón en iOS5 y recibí el error:

"Pasando la dirección del objeto no local al parámetro _autoreleasing para reescritura"

//Instantiate an instance of AVAudioSession object
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
//Setup playback and Record
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error ];

La solución temporal para mí es hacer esto:

NSError *theError = nil;

//Instanciste an instance of AVAudioSession object
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
//Setup playback and Record
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&theError];
//Activate session
[audioSession setActive:YES error:&theError];

Esto es molesto porque tengo que crear este objeto local cada vez que necesito usarlo en Xcode.

Mi pregunta es: ¿Existe una mejor manera de hacer esto en el nuevo paradigma ARC?

Encontré una pregunta similar aquí en el desbordamiento de pila que trata con este problema tipo de ... aquí

preguntado el 08 de noviembre de 11 a las 19:11

1 Respuestas

La forma preferida de manejar esta situación en caso de que realmente quisiera usar el ivar NSError *error sería:

NSError *theError = nil;
    //...
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&theError];
if (theError != nil){
    error = theError;
    //Handle failure
}
[audioSession setActive:YES error:&theError];
if (theError != nil){
    error = theError;
    //Handle failure
}

Supongo que quieres ignorar los errores por completo, perdóname si me equivoco. Eso se puede hacer simplemente haciendo esto (aunque no se recomienda):

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];

respondido 09 nov., 11:00

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.