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”显然是如何做到的。 看到上面的答案!
这是一个截图,显示了我如何解决这个错误。 我不确定这是否与上述答案一样,但我认为它是类似的。
- 转到Xcode中的断点导航器。
- 按住Control键并点击“所有例外”行。
- select“编辑断点…”选项。
- 将
Exception
从All
更改为Objective-C
。
回溯帮助了很多,谢谢! 最近我们开始遇到同样的问题。 事实certificate,它正在投入的MP3文件没有一个有效的ID3标签,并通过一个应用程序,如Tagr运行他们固定他们的权利!
尝试将AVAudioPlayer设置为类variables!