アプリをロードするたびに、この行にブレークポイントを設定したかのように停止します。
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 ++例外をスローするという問題は解決されません。