Iphone 如何安全地停止AVAudioPlayer

Iphone 如何安全地停止AVAudioPlayer,iphone,crash,release,avaudioplayer,Iphone,Crash,Release,Avaudioplayer,我有一个AVAudioPlayer,有两个按钮:播放和停止。 播放按钮在播放时隐藏,反之亦然 问题是,在播放结束时,在调用“AudioPlayerDifInishPlay”方法时,当我尝试按下停止按钮时,会发生崩溃。 实际上,这个方法释放了AVAudioPlayer,当我按下停止按钮(也释放了对象…)时,它崩溃了。 但是,在手动释放之前,我仍然测试玩家是否为零,那么为什么它会崩溃以及如何避免呢 我的代码: 在.h中: @private AVAudioPlayer* monPlayer; 在.

我有一个AVAudioPlayer,有两个按钮:播放和停止。 播放按钮在播放时隐藏,反之亦然

问题是,在播放结束时,在调用“AudioPlayerDifInishPlay”方法时,当我尝试按下停止按钮时,会发生崩溃。 实际上,这个方法释放了AVAudioPlayer,当我按下停止按钮(也释放了对象…)时,它崩溃了。 但是,在手动释放之前,我仍然测试玩家是否为零,那么为什么它会崩溃以及如何避免呢

我的代码: 在.h中:

@private AVAudioPlayer* monPlayer; 
在.m中:

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

编辑:只需在委托方法中将局部变量“player”替换为实例变量“monPlayer”,就可以了。多亏了hotpaw2:-)

您的代码似乎将本地参数player设置为nil,而不是对象实例变量monPlayer。

Ho Ho。。。您完全正确:现在它可以工作了,用实例变量替换局部变量。非常感谢。