Приложение зависает при воспроизведении звука с AVAudioPlayer - PullRequest
0 голосов
/ 27 января 2010

Я делаю приложение для дошкольников с несколькими мини-играми.Один из них включает в себя поиск «что не так» на картинке.Например, если они нажимают на ребенка, играющего на улице, раздается звуковой сигнал, ребенок перемещается с улицы, и метка обновляется до «1/5 найденных ошибок».Если они найдут их все, они перейдут к новому контроллеру представления с новыми ошибками трафика.

Все работает просто отлично ... большую часть времени.Но время от времени приложение проигрывает музыку, а затем зависает.Я думаю, что это связано с фактическим воспроизведением звука (с AVAudioplayer), потому что, если я закомментирую это, он, кажется, будет работать каждый раз.

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

Этот код находит «antall», текущее количество найденных ошибок (баллов).Если все ошибки были найдены, воспроизводится определенный звук (этот всегда работает).Если не другой звук играет.Это можно сделать, вызвав функцию в файле 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");
}

Это прекрасно работает в 49/50 случаях, но время от времени - нет.Самое смешное, что звук воспроизводится, но приложение зависает, а ярлык не обновляется (self.poeng.text = ...).Но отображаются все комментарии NSLog, включая новое количество баллов.Я ожидал, что это произойдет до того, как будет воспроизведен звук ...

Это проблема с AVAudioplayer?У кого-нибудь есть подобный опыт?Кто-нибудь может мне помочь в этом?Я благодарен за любую помощь или предложения ...

(И извините за норвежца. Возможно, мне не легче помочь ...)

1 Ответ

0 голосов
/ 27 января 2010

Вам, вероятно, нужно реализовать методы AVAudioPlayerDelegate, чтобы вы могли попытаться отловить ошибки игрока. Если делегат сообщает, что проигрыватель успешно завершил работу, даже если приложение зависло, ошибка, скорее всего, не связана с проигрывателем.

Я чувствую к тебе. Немногие задачи по отладке являются более неприятными, чем отслеживание определенной, но очень неустойчивой ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...