【发布时间】:2012-03-29 19:48:18
【问题描述】:
每次我加载应用程序时,它都会停止,就好像我在这一行设置了一个断点:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
这条线上方或附近没有任何断点。只有当我在调试模式下运行应用程序并且断点后没有崩溃时才会发生这种情况。当我点击“继续执行程序”时,应用程序没有任何反应。
这是loadData方法,用initWithData调用:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
loadData 函数似乎工作正常。断点后加载和播放请求的 mp3 文件没有任何问题。
你知道我做错了什么吗?
编辑: 当它在断点处停止时,我运行了回溯。这是输出:
(lldb) BT * 线程 #1:tid = 0x1c03,0x30df1724 libc++abi.dylib`__cxa_throw,停止原因 = 断点 1.2 帧#0:0x30df1724 libc++abi.dylib`__cxa_throw 帧 #1: 0x36403a24 AudioToolbox`ID3ParserHandle::ID3ParserHandle(void*, long (*)(void*, unsigned long, unsigned long, unsigned long, void**, unsigned long*)) + 452 帧 #2:0x36403b0e AudioToolbox`ID3ParserOpen + 142 帧#3:0x3635bd16 AudioToolbox`MPEGAudioFile::ParseID3Tags() + 58 帧 #4: 0x3635b9aa AudioToolbox`MPEGAudioFile::ParseAudioFile() + 26 帧 #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 帧#6:0x36316480 AudioToolbox`AudioFileOpenWithCallbacks + 612 帧 #7: 0x31f4c1ec AVFoundation`-[AVAudioPlayer initWithData:error:] + 120“解决方案”: 事实证明,如果我为所有异常禁用异常断点并且只对 Objective-C 异常使用断点,问题就会消失。但是并没有解决分配AVAudioPlayer抛出C++异常的问题。
【问题讨论】:
-
我有相同的堆栈跟踪。禁用“所有异常”断点使我不会发生这种情况。
标签: ios objective-c iphone cocoa-touch avaudioplayer