Каждый раз, когда я загружаю приложение, оно останавливается, как если бы я установил точку останова в этой строке:
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 ++.