audioPlayerDidFinishPlaying从不触发

我创build了一个自定义类来处理audio播放。

AudioPlayback.h

#import <Foundation/Foundation.h> #import "AVFoundation/AVAudioPlayer.h" #import <AVFoundation/AVFoundation.h> @interface AudioPlayback : NSObject <AVAudioPlayerDelegate> { AVAudioPlayer *player; BOOL playing; NSTimeInterval duration; } @property (nonatomic, assign) AVAudioPlayer *player; @property (readonly) BOOL playing; @property (readonly) NSTimeInterval duration; -(NSTimeInterval)GetSoundFileDuration:(NSString *) sound_file_name; -(void)PlaySoundFile:(NSString *) sound_file_name; -(void)play; -(void)stop; - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag; @end 

然后,在AudioPlayback.h中

 #import "AudioPlayback.h" @implementation AudioPlayback @synthesize player; -(id)init { self = [super init]; if (self != nil) { player = [[AVAudioPlayer alloc] init]; [player initWithContentsOfURL:nil error:nil]; player.delegate = self; } return self; } -(void)PlaySoundFile:(NSString *) sound_file_name { NSURL *sound_file = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:sound_file_name ofType:@"mp3"]]; [player initWithContentsOfURL:sound_file error:nil]; [player prepareToPlay]; [player play]; [sound_file release]; } ... - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSLog(@"audioPlayerDidFinishPlaying"); } 

callback从不触发。 我错过了什么明显的?

我认为“ player.delegate = self ”太早。 您在“ PlaySoundFile ”中再次“ initWithContentsOfURL ”,我认为这会导致问题。

尝试在“ PlaySoundFile ”方法中的“ [player prepareToPlay] ”之前放置“ player.delegate = self