我有一个带有两个按钮的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 :-)

===============>>#1 票数:2 已采纳

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

  ask by Chrysotribax translate from so

未解决问题?本站智能推荐: