Проблема с переменной при переходе с iOS 4 на iOS 5 + ARC: «Передача адреса нелокального объекта в параметр _autoreleasing для обратной записи» - PullRequest
1 голос
/ 08 ноября 2011

«Старый» способ, которым я делал это в iOS 4, заключался в объявлении объекта в заголовочном файле и передаче объекта для обратной записи для обработки параметра ошибки.

NSError *error;

По независящим от меня причинам я не смог продолжить этот шаблон в iOS5 и получил ошибку:

"Передача адреса нелокального объекта в параметр _autoreleasing для обратной записи"

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

Временное решение для меня заключается в том, чтобы сделать это:

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];

Это раздражает, так как мне приходится создавать этот локальный объект каждый раз, когда мне нужно использовать его в Xcode.

Мой вопрос таков: есть ли лучший способ сделать это в новой парадигме ARC?

Я нашел подобный вопрос здесь в переполнении стека, который имеет дело с этой проблемой вроде ... здесь

1 Ответ

2 голосов
/ 09 ноября 2011

Предпочтительный способ справиться с этой ситуацией в том случае, если вы на самом деле хотели использовать ivar NSError *error, был бы:

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
}

Я предполагаю, что вы хотите полностью игнорировать ошибки, извините, еслиЯ не прав.Это можно сделать, просто выполнив это (хотя и не рекомендуется):

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