为啥不执行 audioPlayerDidFinishPlaying

Posted

技术标签:

【中文标题】为啥不执行 audioPlayerDidFinishPlaying【英文标题】:Why isn't the audioPlayerDidFinishPlaying not being executed为什么不执行 audioPlayerDidFinishPlaying 【发布时间】:2013-04-13 06:04:50 【问题描述】:

我有这段音频播放器代码,但我不知道为什么 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 的名称设置为 player,然后对其进行检查,但它似乎仍然没有被调用

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

【问题讨论】:

感谢您的反馈,我正在尝试利用不再存在的人完成的现有代码。你能否给我一个关于如何解决的例子。我在为 iPhone 编程方面比较新,对此感到抱歉。 哦,对不起...好吧。如果您只想播放音频文件,则必须使用AVAudioPlayer。另外,正如我刚刚在回答中确认的那样,您必须设置它的委托(否则将不会调用委托方法)。 好吧,我刚刚发现 AVAudioPlayer 不支持 HTTP 流。从这里查看这篇文章***.com/questions/3413932/… 显然这是前任程序员忽略的一些遗留代码 【参考方案1】:

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

【讨论】:

【参考方案2】:

我遇到的问题的答案实际上是由于以前的程序员解决了这个问题。他错误地尝试使用AVAudioPlayer 播放非本地但需要从 URL 检索的音频文件。所以他将代码迁移到AVPlayer,这确实允许但留在旧的不相关代码中。我错误地看到了代码,并认为那里有正确的方法,并且对它没有运行的事实感到困惑。能够结束播放文件是他留下的AVAudioPlayer 功能的一部分。此后我使用正确的编码方法来实现我想要的。

希望这会导致对我的分数的负面标记被删除,因为代码之前运行但没有我正在寻找的功能,我错误地认为那部分代码是有效的,而实际上它不是。

【讨论】:

以上是关于为啥不执行 audioPlayerDidFinishPlaying的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 javascript 命令不执行?

为啥 HtmlUnitDriver 不执行 JavaScript?

为啥函数不执行特定行

为啥不执行 std::function

为啥 CreateProcessW() 不执行提供的命令?

为啥可点击的预期条件不执行 click()?