Question

Je fais une application pour enfants d'âge préscolaire avec plusieurs mini-jeux. L'un d'eux consiste à trouver « ce qui est faux » dans l'image. Par exemple, s'ils appuient sur l'enfant qui joue dans la rue, une tonalité Pling, l'enfant est déplacé sur la rue, et une étiquette est mise à jour à « 1/5 erreurs trouvées ». S'ils les trouvent tous, ils se déplacent à une nouvelle viewcontroller avec de nouvelles erreurs de trafic.

Tout fonctionne très bien ... la plupart du temps. Mais chaque fois dans un certain temps l'application joue le Pling, puis gèle. Je pense qu'il a à voir avec le jeu réel du son (avec AVAudioPlayer), parce que si je commente que dehors, il semble fonctionner à chaque fois.

La fonction qui est appelée lorsqu'une erreur est trouvée est la suivante:

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

Ce code trouve « Antall », le nombre actuel d'erreurs trouvées (points). Si toutes les erreurs ont été trouvées un certain son est joué (celui-ci fonctionne toujours). Sinon un autre son joue. Cela se fait en appelant une fonction dans le fichier 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");
}

Cela fonctionne très bien dans 49/50 cas, mais chaque fois dans un certain temps il ne marche pas. Le plus drôle est que le son ne joue, mais l'application se fige, et l'étiquette est pas mis à jour (self.poeng.text = ...). Mais tous les commentaires NSLog sont présentés, y compris le nouveau nombre de points. J'attendre que cela se produise avant que le son est joué ...

Est-ce un problème avec le AVAudioPlayer? Quelqu'un at-il des expériences similaires? Quelqu'un peut-il me aider sur celui-ci? Je suis reconnaissant pour toute aide ou suggestions ...

(Et désolé la Norvégienne. Il ne marche probablement rendre plus facile de me aider ...)

Pas de solution correcte

Autres conseils

Vous avez probablement besoin de mettre en œuvre les méthodes de AVAudioPlayerDelegate afin que vous puissiez essayer d'intercepter les erreurs du lecteur. Si le délégué indique que le joueur a terminé avec succès, même si le gel d'application, l'erreur est très probablement pas lié au joueur.

Je me sens pour vous. Peu tâche de débogage sont plus frustrant que de traquer un bug défini mais très intermittent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top