【问题标题】:AVPlayerItemDidPlayToEndTime notification not working on iOS 11AVPlayerItemDidPlayToEndTime 通知在 iOS 11 上不起作用
【发布时间】:2017-10-23 05:37:07
【问题描述】:

在以前的版本中,AVPlayer 上有完成按钮,当添加以下通知时,它起作用了:

NotificationCenter.default.addObserver(self, selector: #selector(CourseDetailViewController.moviePlayBackDidFinish(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)  

现在突然,在 iOS 11 中,首先没有完成按钮(它被十字按钮取代),其次,在点击十字按钮时,NSNotification.Name.AVPlayerItemDidPlayToEndTime 没有被触发。
这就是我在AVPlayerViewController 的帮助下向玩家展示的方式

player = AVPlayer(url: url! as URL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true)

【问题讨论】:

  • 请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。这在标题中被认为特别令人厌烦,所以我投了反对票 - 你是一位经验丰富的 Stack Overflow 用户,应该知道这一点。
  • @halfer:我很感激。据我所知(我真的对此不感兴趣,而是对解决方案感兴趣),当您起草问题时,堆栈溢出本身会限制问题标题中某些关键字的使用。如果他们认为不应该使用 URGENT,我不必担心将其删除(您自己掌握的事情 :))我在编辑问题方面享有一定的声誉,但我只在它有效时才这样做。无论如何,现在如果你能解决更相关的部分,即答案。
  • (这里的一个讨论帖被参与者删除,以便为主题讨论腾出空间。我将留下一条在社区中流行的建议,即:downvotes 不是个人的,它们是只是消息。)
  • @CupawnTae:是的。如果播放器关闭,则调用 AVPlayerItemDidPlayToEndTime,无论是否强制关闭。这在以前的 iOS 版本中一直有效。当 iOS 11 更新时,我的应用程序开始出现问题。
  • @Nitish 事实上,根据文档和经验证据,当点击“完成”时,不应发布此通知。你考虑过我的问题吗?

标签: ios swift avplayer ios11 avplayerviewcontroller


【解决方案1】:

documentation 声明 AVPlayerItemDidPlayToEndTime

在项目播放到结束时间时发布

考虑到通知的名称,这很有意义。

相反,在项目完成播放之前点击您的AVPlayerViewController 的完成(或 X)按钮意味着它不会播放到其结束时间,因此不会发出通知已发布。

在 iOS 9.3 上对此进行测试表明其行为与在 iOS 11 上相同。

您的应用程序中或 iOS 11 与您的应用程序的交互中必须发生其他一些变化,这会导致您观察到的行为发生变化。在没有看到您的代码的情况下,其他任何事情都是猜测,但根据您的描述,AVPlayerItemDidPlayToEndTime 的行为符合预期。

【讨论】:

  • 感谢测试结果。问题是我已经好几个月没有碰过代码了,问题就开始出现了。唯一不同的是,在 iOS 11 中,播放器上没有完成按钮,而是由十字按钮代替。因此通知没有被调用。
  • 我明白,但我的意思是通知不应该发布 - 所以其他的东西必须不同。这很可能是 iOS 11 中的行为变化,但我会寻找 AVPlayerItemDidPlayToEndTime 以外的根本原因,例如我在 cmets 上发布的关于上述问题的问题。您是否 100% 确定正在发布通知,而不是其他调用相同处理程序方法的东西?如果是这样,当点击“完成”时,您自己的代码中是否有某些内容发布通知?
  • Pranjal Bikash Das 以防万一你回到这里,我恢复了你建议的编辑,因为这不是 code 格式的正确使用 - 例如文本“iOS 9.3”不是代码,不应该是标记为这样
  • @CupawnTae:您可以在此处 ping 编辑,即使他们还没有发表评论。只需获取此人的用户名,删除所有空格,并在其前面加上 @ 符号,例如@PranjalBikashDas 在这种情况下。我相信你也可以逃脱第一点,例如@Pranjal.
猜你喜欢
  • 2018-03-05
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多