Domanda

Sto facendo un app per bambini in età prescolare con diversi mini-giochi. Uno di essi consiste nel trovare "ciò che è sbagliato" nella foto. Per esempio, se si preme il bambino che gioca in strada, un pling suona, il bambino viene spostato fuori strada, e un'etichetta viene aggiornato a "1/5 errori trovati". Se trovano tutti loro, si muovono a una nuova viewcontroller con nuovi errori di traffico.

Tutto sta funzionando bene ... la maggior parte del tempo. Ma ogni tanto, mentre l'applicazione interpreta il pling, e poi si blocca. Io penso che abbia a che fare con la riproduzione del suono (con AVAudioPlayer), perché se io commento che fuori, sembra funzionare ogni volta.

La funzione che viene chiamata quando viene rilevato un errore è questo:

-(void)fantKnapp{

    NSLog(@"fant en knapp");
    int ant =[self.antall intValue];
    ant++;
    NSLog(@"antall %i",ant);
    self.antall=[NSNumber numberWithInt:ant];
    self.poeng.text=[NSString stringWithFormat: @"%i/5 funnet",ant];

    if(ant==5){
        NSLog(@"Du klarte alle!");
        klartAlleView.hidden=NO;
        spillIgjen.hidden=NO;
        nestebrettKnapp.hidden=NO;
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"du_klarte_alle"];
    }
    else{
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"cling_1"];
    }
}

Questa codici trova "Antall", l'attuale numero di errori rilevati (punti). Se tutti gli errori sono stati trovati un certo suono viene riprodotto (questo funziona sempre). Se non altro suono gioca. Questo viene fatto chiamando una funzione nel file AppDelegate.

-(void)spillLyd:(NSString*) filnavn{
    NSString *audioFilePath=[[NSBundle mainBundle] pathForResource:filnavn ofType:@"aif"];
    NSURL *audioFileURL=[NSURL fileURLWithPath:audioFilePath];
    self.lydspiller=[[[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil] autorelease];
    [self.lydspiller prepareToPlay];
    [self.lydspiller play];
    NSLog(@"spiller lyden");
}

Questo funziona bene in 49/50 casi, ma ogni tanto un po 'è pretende molto. La cosa divertente è che il suono viene riprodotto, ma l'applicazione si blocca, e l'etichetta non viene aggiornato (self.poeng.text = ...). Ma tutti i commenti NSLog sono mostrati, tra cui il nuovo numero di punti. Mi aspetto che questo accada prima che il suono viene riprodotto ...

Si tratta di un problema con l'AVAudioPlayer? Qualcuno ha esperienze simili? Qualcuno mi può aiutare su questo? Sono grato per qualsiasi aiuto o suggerimenti ...

(E dispiace per il norvegese. Probabilmente non rende affatto più facile per aiutare me ...)

Nessuna soluzione corretta

Altri suggerimenti

Probabilmente è necessario implementare i metodi AVAudioPlayerDelegate in modo che si può cercare di intercettare gli errori dal lettore. Se il delegato riporta che il giocatore è concluso con successo, anche se si blocca app, allora l'errore è più probabile che non correlata al giocatore.

che provo per te. Pochi compito di debug sono più frustrante di rintracciare un bug definito ma altamente intermittente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top