Pergunta

Estou fazendo um aplicativo para pré-escolares com vários mini-jogos. Um deles envolve encontrar "o que está errado" na foto. Por exemplo, se eles pressionarem o garoto tocando na rua, um sons de pling, a criança é movida a rua e uma etiqueta é atualizada para "erros de 1/5 encontrados". Se eles encontrarem todos eles, passam para um novo ViewController com novos erros de tráfego.

Tudo está funcionando muito bem ... na maioria das vezes. Mas de vez em quando, o aplicativo joga o prato e depois congela. Eu acho que tem a ver com o reprodução real do som (com Avaudioplayer), porque se eu comentar isso, parece funcionar toda vez.

A função que é chamada quando um erro é encontrado é o seguinte:

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

Esses códigos encontram "Antall", o número atual de erros encontrados (pontos). Se todos os erros foram encontrados, um certo som é reproduzido (este sempre funciona). Se não outro som toca. Isso é feito chamando uma função no arquivo 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");
}

Isso funciona muito bem em 49/50 casos, mas de vez em quando não. O engraçado é que o som é reproduzido, mas o aplicativo congela e o rótulo não é atualizado (self.poeng.text = ...). Mas todos os comentários do NSLog são mostrados, incluindo o novo número de pontos. Eu esperaria que isso acontecesse antes que o som seja reproduzido ...

Isso é um problema com o Avaudioplayer? Alguém tem experiências semelhantes? Alguém pode me ajudar neste? Sou grato por qualquer ajuda ou sugestão ...

(E desculpe pelo norueguês. Provavelmente não facilita me ajudar ...)

Nenhuma solução correta

Outras dicas

Você provavelmente precisa implementar o AVAudioPlayerDelegate Métodos para que você possa tentar prender erros do jogador. Se o delegado relatar que o jogador terminou com sucesso, mesmo que o aplicativo congele, o erro provavelmente não estará relacionado ao jogador.

Sinto por você. Poucas tarefas de depuração são mais frustrantes do que rastrear um bug definitivo, mas altamente intermitente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top