我在我的应用程序中创建了一个声音循环,当用户按下出现的UIAlertView
上的“确定”按钮时,我想停止。
我有两个问题:
当我打开断点并为所有异常设置断点时,[audioPlayer play]
上会出现异常,但日志上没有显示错误,并且在通过异常“F8-ing”之后应用程序不会崩溃,除非没有声音。
我遇到的另一个问题是,在用户点击“确定”按钮后音频文件不会停止,并且断点通知表明它确实读取了[audioPlayer stop]
电话。我不知道造成这些错误的是什么,我所做的一切似乎都没有帮助。
AVAudioPlayer *audioPlayer;
-(void)done {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Timer Done" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alert show];
[self playAlert];
}
-(void)playAlert {
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Alarm" ofType:@"caf"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
audioPlayer.numberOfLoops = -1; //infinite
[audioPlayer play];
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
if ([audioPlayer isPlaying]) {
[audioPlayer stop];
}
}
}
请让我知道如何解决这个问题。
答案 0 :(得分:1)
一个明显的问题是你传递了nil作为UIView委托,所以你永远不会被回调。
即
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Timer Done" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
应该是:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Timer Done" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
另一个问题是buttonIndex从零开始。所以在回调中你应该检查零而不是一个。