2012-03-22 46 views
0

我写了这个源程序。但我不能拨打 audioPlayerDidFinishPlaying:方法。 播放声音后,几秒钟后会因“exc_bad_access”错误而崩溃。我应该怎么做才能调用audioPlayerDidFinishPlaying:

.h文件中

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface SecondViewController : UIViewController< 
AVAudioPlayerDelegate>{ 
    AVAudioPlayer *aPlayer; 
} 
@end 

.m文件

-(void)playSound{ 

NSString *soundName = @"red"; 
NSError *error = nil; 
NSURL *soundUrl = [[NSBundle mainBundle] URLForResource:soundName withExtension:@"mp3"]; 
aPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error]; 

if (error != nil) { 
    NSLog(@"audio_player initialized error :(%@)",[error localizedDescription]); 
    [aPlayer release]; 
    error=nil; 
    return; 
} 

NSLog(@"player Ok!"); 
aPlayer.delegate = self; 
[aPlayer prepareToPlay]; 
aPlayer.volume=1.0f; 

[aPlayer play]; 

} 
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ 
[player release]; 
} 

回答

0

这是我用完美的作品,它应该帮助你。

-(void)playSound{ 

    NSString *name = [[NSString alloc] initWithFormat:@"red"]; 
    NSString *source = [[NSBundle mainBundle] pathForResource:name ofType:@"mp3"]; 
    if (data) { 
     [data stop]; 
     data = nil; 
    } 
    data=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: source] error:NULL]; 
    data.delegate = self; 
    [data play]; 
} 
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag{ 
    NSLog(@"my log"); 
    [data release]; 
} 
+0

...它出错了,因为您已将您的AVAudioPlayer声明为“aPlayer”,然后在您的audioPlayerDidFinishPlaying方法中调用“player”。 – 2012-03-23 16:11:51

相关问题