我正在使用AVAudioPlayer(在计算器应用程序中)按钮上运行音频文件。我在iOS7上遇到的问题是,每当按钮被快速点击时,音频播放器的播放方法会导致AVAudioPlayer出现内部错误。这是代码部分
@try
{
if(self.allAudioPlayers == nil)
{
[self initializePlayer];
}
AVAudioPlayer *player = [self grabPlayer];
if(player != nil)
{
NSLog(@"Playing....");
[player play]; //Crashing Here
}
else
{
NSLog(@"Player nil");
}
}
@catch (NSException *exception)
{
NSLog(@"playCalculatorTickSound Exception: %@", [exception description]);
NSLog(@"Call Stack: %@", [exception callStackSymbols]);
}
一旦我得到这个问题ResolveOpageRef,现在我得到这个问题_platform_memmov $ VARIANT $ CortexA8。
这是调用堆栈的另一个图像(它永远不会相同并且在某个级别上有所不同)
我的异常处理代码没有捕获异常,因为它是内部错误。无论如何要抓住这个,以便应用程序不会崩溃?
我正在使用线程调用此方法。我不确定,但可能是多个线程正在尝试同时读取文件而[播放器播放]正在处理线程的同步并且未能这样做。
提前致谢
答案 0 :(得分:0)
感谢大家的意见。我认为这个问题已经解决了。这是更新的代码。似乎线程是主要问题。 AVAudioPlayer的播放方法在多个线程的同时表现不佳。我不知道它是如何在内部工作,但我认为它正在管理某种队列(从调用堆栈判断)。我在主线程上执行了它,现在工作正常。
@try
{
if(self.allAudioPlayers == nil)
{
[self initializePlayer];
}
AVAudioPlayer *player = [self grabPlayer];
if(player != nil)
{
NSLog(@"Playing....");
dispatch_async(dispatch_get_main_queue(), ^{
[player play];
});
}
else
{
NSLog(@"Player nil");
}
}
@catch (NSException *exception)
{
NSLog(@"playCalculatorTickSound Exception: %@", [exception description]);
NSLog(@"Call Stack: %@", [exception callStackSymbols]);
}
另外,由于这个Any suggestions on how to handle this crash in CGImageDestinationFinalize?,我能够将注意力转移到线程问题上。