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