为什么没有执行audioPlayerDidFinishPlaying

时间:2013-04-13 06:04:50

标签: ios6 storyboard avaudioplayer

我有这个audioplayer代码片段,我不知道为什么audioPlayerDidFinishPlaying没有被执行。

以下是我的audioplayer.m文件中代码的一部分

- (void)viewDidLoad {
[super viewDidLoad];
NSError* e = nil;
self.player = [[AVPlayer alloc] initWithURL:self.contentURL];
if(e)
{
    NSLog(@"Detected error(%@)",e);
}

[self.playButton  setImage:[UIImage imageNamed :@"Pause_40_40.png"] forState:UIControlStateNormal] ;
[self.playButton addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];

isPlaying = true;

//Title of Music Screen
//self.title = titleOfTheSong;
//self.title = @"A Fixed Title";

MPVolumeView * volmueView = [[MPVolumeView alloc] initWithFrame:CGRectMake(60, 323, 200, 23)];
volmueView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
[self.view addSubview:volmueView];

[[AVAudioSession sharedInstance] setDelegate:self];
e = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&e];
NSLog(@"Error: %@", e);

posUpdateTimer =  [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(timeCounterUpdate) userInfo:self.player repeats:YES];
[self timeCounterUpdate2:self.positionSlider.value];
[self.player play];

}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"Finished");
if (flag == NO){
    return;
}

[self.player pause];
[self.navigationController popViewControllerAnimated:YES];
}

我在viewDidload中将avplayer的名称设置为播放器然后检查,但它似乎仍未被调用

音频停止播放但似乎仍在运行当前位置值确实停止 但按钮仍然显示音频仍然处于播放模式,如果我暂停它然后播放它当前位置只是继续计数通过文件的假定结束。

2 个答案:

答案 0 :(得分:0)

因为1.你不使用AVAudioPlayer而是使用AVPlayer,2。你没有设置音频播放器对象的委托。

答案 1 :(得分:0)

我遇到的问题的答案实际上是由于之前曾参与其中的程序员所致。他错误地尝试使用AVAudioPlayer来播放非本地但需要从URL中检索的音频文件。因此,他将代码迁移到AVPlayer,这允许但保留旧的无关代码。我错误地看到了代码,并认为正确的方法在那里,并被它没有运行的事实搞糊涂了。能够从播放中结束文件是他留下的AVAudioPlayer功能的一部分。我已经使用了正确的编码方法来实现我想要的功能。

希望这会导致对我的分数的负面标记被删除,因为代码以前运行但没有我正在寻找的功能我错误地认为代码部分在有效时没有。