我有一个带有两个按钮的AVAudioPlayer:播放和停止。 播放时隐藏播放按钮,反之亦然。
问题是当我在调用方法“audioPlayerDidFinishPlaying”时尝试在播放结束时按下“停止”按钮时发生崩溃。 实际上,这个方法释放了AVAudioPlayer,当我按下停止按钮(它也释放了对象......)时它会崩溃。 但是,我仍然测试玩家在手动释放之前是否为零,那为什么会崩溃以及如何避免这种情况?
我的代码: 在.h:
@private AVAudioPlayer* monPlayer;
<。>中的:
-(IBAction)playSound{
NSString *path = nil;
if(path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"sounds/%d", idoiseau] ofType:@"m4a"])
{
monPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
monPlayer.delegate = self;
[monPlayer play];
[buttonPlay setEnabled:NO];
[buttonStop setEnabled:YES];
}
else return;
}
-(IBAction)stopSound{
if(!monPlayer) return;
[monPlayer stop];
[monPlayer release];
monPlayer = nil;
[buttonPlay setEnabled:YES];
[buttonStop setEnabled:NO];
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
[player release];
player = nil;
[buttonPlay setEnabled:YES];
[buttonStop setEnabled:NO];
}
编辑:只需用委托方法中的实例变量“monPlayer”替换局部变量“player”,它就可以了。感谢hotpaw2: - )
答案 0 :(得分:2)
您的代码似乎是将本地参数播放器设置为nil而不是对象实例变量monPlayer。