Sempre que carrego o aplicativo, ele para como se eu tivesse definido um ponto de interrupção nesta linha:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
Não há ponto de interrupção acima ou em qualquer lugar próximo a esta linha. Isso só acontece quando eu executo o aplicativo no modo de depuração e nada trava após o ponto de interrupção. O aplicativo funciona como se nada acontecesse quando clico em "Continuar a execução do programa".
Este é o método loadData, que é chamado com initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
A função loadData parece estar funcionando bem. O arquivo mp3 solicitado é carregado e reproduzido sem problemas após o ponto de interrupção.
Você tem alguma ideia do que estou fazendo de errado?
EDIT: Eu executei um backtrace quando ele para no ponto de interrupção. Este foi o resultado:
(lldb) bt * thread # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, motivo de parada = ponto de interrupção 1.2 frame # 0: 0x30df1724 libc ++ abi.dylib`__cxa_throw frame # 1: 0x36403a24 AudioToolbox`ID3ParserHandle :: ID3ParserHandle (vazio *, longo (*) (vazio *, longo sem sinal, longo sem sinal, longo sem sinal, vazio **, longo sem sinal *)) + 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: erro:] + 120
"SOLUÇÃO": Acontece que, se eu desabilitar o ponto de interrupção de exceção para todas as exceções e usar apenas o ponto de interrupção para exceções Objective-C, o problema desaparece. Mas isso não resolve o problema de que a alocação de AVAudioPlayer lança uma exceção C ++.