每次我加载应用程序时,它都会停止,就像我在此行设置了断点一样:
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 文件被加载并播放,没有任何问题。
你知道我做错了什么吗?
EDIT:当它停在断点处时我运行了回溯。这是输出:
(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++异常的问题。