IOS 7 - 捕获内部库错误异常

时间:2013-12-31 10:43:43

标签: ios exception exception-handling ios7 crash

我正在使用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。

enter image description here

这是调用堆栈的另一个图像(它永远不会相同并且在某个级别上有所不同) enter image description here

我的异常处理代码没有捕获异常,因为它是内部错误。无论如何要抓住这个,以便应用程序不会崩溃?

我正在使用线程调用此方法。我不确定,但可能是多个线程正在尝试同时读取文件而[播放器播放]正在处理线程的同步并且未能这样做。

提前致谢

1 个答案:

答案 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?,我能够将注意力转移到线程问题上。