Ogni volta che carico l'app si ferma come se avessi impostato un breakpoint su questa riga:
self.audioPlayer =
[[[AVAudioPlayer alloc] initWithData:[dataPersister loadData:self.fileName]
error:&outError] autorelease];
Non ci sono punti di interruzione sopra o in qualsiasi punto vicino a questa linea. Succede solo quando eseguo l'app in modalità debug e nulla si arresta in modo anomalo dopo il punto di interruzione. L'app funziona come se non fosse successo nulla quando clicco su "Continua l'esecuzione del programma".
Questo è il metodo loadData, che viene chiamato con initWithData
:
-(NSData*)loadData:(NSString*)fileName
{
NSString *dataPath = [self.path stringByAppendingPathComponent:fileName];
dataPath = [dataPath stringByStandardizingPath];
NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath]autorelease ];
return data;
}
La funzione loadData sembra funzionare correttamente. Il file mp3 richiesto viene caricato e riprodotto senza problemi dopo il punto di interruzione.
Hai idea di cosa sto sbagliando?
MODIFICARE: ho eseguito un backtrace quando si ferma al punto di interruzione. Questo è stato l'output:
(lldb) bt * thread # 1: tid = 0x1c03, 0x30df1724 libc ++ abi.dylib`__cxa_throw, motivo di interruzione = punto di interruzione 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: errore:] + 120
"SOLUZIONE": Si scopre che se disabilito il punto di interruzione dell'eccezione per tutte le eccezioni e utilizzo solo il punto di interruzione per le eccezioni Objective-C, il problema scompare. Ma non risolve il problema che l'allocazione di AVAudioPlayer genera un'eccezione C ++.