AVAudioPlayer在debugging模式下抛出断点

每当我加载的应用程序停止,就像我已经在这一行上设置了一个断点:

self.audioPlayer = [[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName] error:&outError] autorelease]; 

这条线上面没有任何断点。 它只发生在我以debugging模式运行应用程序,并没有崩溃后的断点。 当我点击“继续执行程序”时,应用程序没有任何事情发生。

这是使用initWithData调用的loadData方法:

 -(NSData*)loadData:(NSString*)fileName { NSString *dataPath = [self.path stringByAppendingPathComponent:fileName]; dataPath = [dataPath stringByStandardizingPath]; NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ]; return data; } 

loadData函数似乎工作正常。 请求的mp3文件在断点后加载和播放没有任何问题。

你有什么想法我做错了吗?

编辑:我跑了一个backtrace,当它停在断点。 这是输出:

 (lldb)bt
 * thread#1:tid = 0x1c03,0x30df1724 libc ++ abi.dylib`__cxa_throw,stop reason = breakpoint 1.2
     frame#0:0x30df1724 libc ++ abi.dylib`__cxa_throw
     frame#1:0x36403a24 AudioToolbox`ID3ParserHandle :: ID3ParserHandle(void *,long(*)(void *,unsigned long,unsigned long,unsigned long,void **,unsigned long *))+ 452
    帧#2:0x36403b0e AudioToolbox`ID3ParserOpen + 142
     frame#3:0x3635bd16 AudioToolbox`MPEGAudioFile :: ParseID3Tags()+ 58
     frame#4:0x3635b9aa AudioToolbox`MPEGAudioFile :: ParseAudioFile()+ 26
     frame#5:0x3631723e AudioToolbox`AudioFileObject :: DoOpenWithCallbacks(void *,long(*)(void *,long long,unsigned long,void *,unsigned long *),long(*)(void *,long long,unsigned long (*)(void *),long(*)(void *,long long))+ 166
    帧#6:0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612
    帧#7:0x31f4c1ec AVFoundation`- [AVAudioPlayer initWithData:error:] + 120

“解决scheme”:事实certificate,如果我禁用所有exception的exception断点,并只为Objective-Cexception使用断点,问题就会消失。 但是这并不能解决AVAudioPlayer的分配抛出C ++exception的问题。

添加exception断点并将exceptiontypes从“全部”编辑为“Objective-Cexception”

AudioToolbox中的一些类抛出常规的C ++exception。 你可以用这种方法过滤它们。

AVAudioPlayer和AVAudioRecorder都会抛出exception,其中几个。 这些由玩家在内部处理,但是如果你有一个“所有断点”的断点(即exception:全部,打破:抛出),你将会发现这些例外。 如果您继续执行这些操作,应用程序将继续正常运行,而不会崩溃。

我到目前为止唯一的解决scheme是在Breakpoint Navigator中单击断点栏,禁用这个特定的断点,并禁用它。

当/如果应用程序曾经抛出一个抛出的exception,我cmd-6,启用该断点,并重新运行,做我所做的任何事情,当它坠毁。

编辑:设置为“Objective-Cexception”显然是如何做到的。 看到上面的答案!

这是一个截图,显示了我如何解决这个错误。 我不确定这是否与上述答案一样,但我认为它是类似的。

  1. 转到Xcode中的断点导航器。
  2. 按住Control键并点击“所有例外”行。
  3. select“编辑断点…”选项。
  4. ExceptionAll更改为Objective-C

在这里输入图像说明

回溯帮助了很多,谢谢! 最近我们开始遇到同样的问题。 事实certificate,它正在投入的MP3文件没有一个有效的ID3标签,并通过一个应用程序,如Tagr运行他们固定他们的权利!

尝试将AVAudioPlayer设置为类variables!