我正在为有多个迷你游戏的学龄前儿童制作应用程序。其中一个涉及在图片中找出“出了什么问题”。例如,如果他们按下在街上玩耍的小孩,发出一声叮当声,孩子就会被移出街道,并且标签会更新为“发现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的问题吗?有没有人有类似的经历?任何人都可以帮我解决这个问题吗?我很感谢任何帮助或建议...
(对挪威人抱歉。这可能不会让我更容易帮助我......)
答案 0 :(得分:0)
您可能需要实现AVAudioPlayerDelegate
方法,以便尝试捕获播放器中的错误。如果代表报告即使应用程序冻结,播放器已成功完成,则该错误很可能与播放器无关。
我觉得你。很少有调试任务比追踪明确但非常间歇性的错误更令人沮丧。