Tho*_*sen 105 iphone cocoa-touch objective-c avaudioplayer ios
每次加载应用程序时,它都会停止,就好像我在此行上设置了一个断点:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
Run Code Online (Sandbox Code Playgroud)
这条线上方或附近没有断点.它只在我在调试模式下运行应用程序时发生,并且在断点之后没有任何崩溃.当我点击"继续执行程序"时,该应用程序无效.
这是loadData方法,使用initWithData以下方法调用:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
Run Code Online (Sandbox Code Playgroud)
loadData函数似乎工作正常.在断点之后加载并播放请求的mp3文件没有任何问题.
你知道我做错了什么吗?
编辑: 当它在断点处停止时我跑了回溯.这是输出:
(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
frame #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 const*, unsigned long*), long long (*)(void*), long (*)(void*, long long)) + 166
frame #6: 0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612
frame #7: 0x31f4c1ec AVFoundation`-[AVAudioPlayer initWithData:error:] + 120
"解决方案":事实证明,如果我为所有异常禁用异常断点并且仅对Objective-C异常使用断点,则问题将消失.但它并没有解决AVAudioPlayer的分配引发C++异常的问题.
Mug*_*nth 171
添加异常断点并将异常类型从"All"编辑为"Objective-C exceptions"
AudioToolbox中的某些类会抛出常规的C++异常.您可以通过这种方式过滤它们.
Kal*_*lle 21
AVAudioPlayer和AVAudioRecorder都会抛出异常,其中有几个异常.这些是由玩家在内部处理的,但如果你有一个"所有断点"的断点(即例外:全部,休息:投掷),你将捕获这些例外.如果继续执行这些操作,应用程序将继续正常运行而不会崩溃.
到目前为止,我提出的唯一解决方案是单击断点导航器中的断点栏,禁用此特定断点,并禁用它.
当/如果应用程序崩溃时抛出异常,我cmd-6,启用该断点,并重新运行并执行崩溃时所做的任何事情.
编辑:设置为"Objective-C例外"显然是如何做到的.见上面的答案!
这是显示我如何修复此错误的屏幕截图。我不确定这是否与上面的答案所讨论的方式相同,但我认为它是相似的。
Exception从更改All为Objective-C。