从iOS 4过渡到iOS 5 + ARC期间的可变问题:“将非本地对象的地址传递给_autoreleasing参数以进行回写”

我在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范例中有没有更好的方法呢?

我在堆栈溢出中发现了一个类似的问题,处理这个问题…… 在这里

在您真正想要使用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];