2013-03-13 11 views
21

Utilizzando AVAudioPlayer per aggiungere audio a un'applicazione funzionante, si arresta/si blocca su prepareToPlay. Nota che si ferma/si blocca durante il gioco. Premendo più volte "Continua l'esecuzione del programma" si riavvia l'applicazione. Questo problema si verifica solo quando si esegue il programma nel simulatore.Xcode si arresta su prepareToPlay

Utilizzando Xcode 4.6

Frammenti di codice:

ViewController.h

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface ViewController : UIViewController <AVAudioPlayerDelegate> 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 
{ 
} 

@property (nonatomic, strong) AVAudioPlayer *audioPlayer; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self initilizeAudio]; 
} 

- (void)initilizeAudio 
{ 
    NSError *error = nil; 
    NSURL *audioURL = [[NSBundle mainBundle] URLForResource:@"Background" withExtension:@"mp3"]; 

    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error]; 
    if (error) 
    { 
     NSLog(@"Error in audioPlayer: %@", [error localizedDescription]); 
    } 
    else 
    { 
     [self.audioPlayer setDelegate:self]; 
     [self.audioPlayer prepareToPlay]; 
    } 
} 

@end 

traccia Pila

0 __cxa_throw 
21 -[AVAudioPlayer prepareToPlay] 
22 -[ViewController viewDidLoad] 
. 
. 
. 
+5

A quanto pare non ho ancora il permesso di rispondere alle mie domande. quindi fornire la risposta in un commento. Il problema si sviluppava normalmente con un punto di interruzione impostato su "Tutte le eccezioni" e l'eccezione effettiva generata era __cxa_throw. Che apparentemente risulta essere nelle librerie C++ utilizzate per implementare AVAudioPlayer. Modificando il punto di interruzione su "Tutte le eccezioni di Objective-C", il programma ha funzionato correttamente. (Questo può essere fatto modificando il punto di interruzione e modificando il campo Eccezione in Objective-C.) – zermat

+1

Secondo [Questo post su Meta] (http://meta.stackexchange.com/a/17467) devi aspettare 8 ore se hai meno di 100 rep. Puoi accettare la tua risposta 48 ore dopo. – Sebastian

risposta

66

Il problema era che normalmente si sviluppa con un punto di interruzione impostato su "Tutte le eccezioni" e l'eccezione effettiva generata era __cxa_throw. Che apparentemente risulta essere nelle librerie C++ utilizzate per implementare AVAudioPlayer. Modificando il punto di interruzione su "Tutte le eccezioni di Objective-C", il programma ha funzionato correttamente. (Questo può essere fatto modificando il punto di interruzione e modificando il campo Eccezione per Objective-C.

+1

Fantastico, sono contento che tu abbia postato questo perché mi stavo grattando la testa !!! – LilMoke

+1

Lei, signore, mi ha salvato la giornata! Non posso ringraziarti abbastanza! Ho avuto lo stesso identico problema e mi stava facendo impazzire. :-) – thomas

+0

Grazie! Risolto anche il mio problema! – Marky

4

ho avuto anche questo problema. La soluzione di cui sopra funziona, ma penso che ci sia un modo migliore per risolvere il problema.

Il errori che l'autore suggerisce ignorare indicano che il mac sta provando a inviare l'audio a un dispositivo che non funziona. Sto indovinando che il codice è scritto in C, quindi girare le eccezioni a "solo obiettivo-c" fa tacitare l'eccezione .

la vera difficoltà è quello di ottenere il dispositivo audio a lavorare di nuovo. per me, la ragione del fallimento è che ho è stato il passaggio attorno ad alcuni ingresso e uscita audio, ma (a quanto pare) simulatore iOS aveva ricordato le vecchie impostazioni . Così, quando ho provato i vari passaggi in questa discussione:

Error '!dat' trying to set the (null) audio devices' sample rate

ho avuto l'audio a lavorare di nuovo, e si è fermato gettando le eccezioni.

+0

Non è il problema piuttosto che non c'è hardware audio sul simulatore e questo sembra causare un'eccezione C++ intermedia che può (dovrebbe) essere ignorata (il mio meccanismo suggerito nella risposta accettata). – Drux

Problemi correlati