Pregunta

Estoy haciendo una aplicación para niños en edad preescolar con varios mini-juegos. Uno de ellos consiste en encontrar "lo que está mal" en la imagen. Por ejemplo si se presiona el niño jugando en la calle, se escucha un Pling, el niño se mueve fuera de la calle, y una etiqueta se actualiza a "1/5 errores encontrados". Si los encuentran de todo, se trasladan a un nuevo viewcontroller con nuevos errores de tráfico.

Todo está funcionando muy bien ... la mayor parte del tiempo. Pero de vez en cuando la aplicación interpreta el pling y, a continuación, se congela. Creo que tiene que ver con el juego real del sonido (con AVAudioplayer), ya que si comento que fuera, parece que cada función.

La función que se llama cuando se encuentra un error es la siguiente:

-(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"];
    }
}

Esta códigos hallazgos "Antall", el actual número de errores encontrados (puntos). Si se han encontrado todos los errores que se reproduce un sonido determinado (éste siempre funciona). Si no otro sonido se reproduce. Esto se hace llamando a una función en el archivo 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");
}

Esto funciona muy bien en 49/50 casos, pero de vez en cuando, duerma. Lo curioso es que el sonido que hace el juego, pero la aplicación se congela, y la etiqueta no se actualiza (self.poeng.text = ...). Pero todos los comentarios NSLog se muestran, incluyendo el nuevo número de puntos. Yo esperaría que esto suceda antes de que se reproduzca el sonido ...

Es esto un problema con el AVAudioplayer? ¿Alguien tiene experiencias similares? ¿Puede alguien ayudarme hacia fuera en éste? Estoy agradecido por cualquier ayuda o sugerencias ...

(Y lo de la noruega. Es probable que duerma lo hace más fácil para que me ayude ...)

No hay solución correcta

Otros consejos

Es probable que necesita para implementar los métodos AVAudioPlayerDelegate de modo que usted puede tratar de capturar los errores desde el reproductor. Si los informes de los delegados que el jugador ha finalizado correctamente a pesar de que la aplicación se bloquea, a continuación, es el error más probable es que no está relacionado con el jugador.

Lo siento por ti. Pocos tarea de depuración son más frustrantes que la pista de un fallo definitivo, pero muy intermitente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top