如何在观察者未完成时将AVPlayerItem设置为nil

时间:2015-12-04 06:21:57

标签: ios swift avplayer avplayeritem

我添加一个名为' 状态观察员'进入 AVPlayerItem 。 发送观察者,然后在观察者未完成时将AVPlayerItem设置为nil

我在dealloc AVPlayerItem

时删除了观察者

收到以下错误:

  

NSInternalInconsistencyException',原因:'实例0x7dc5e7d0 of   当键值观察者被释放时,类AVPlayerItem被释放   仍在注册。目前的观察信息:    (上下文:0x0,属性:0x7b8ad140>

3 个答案:

答案 0 :(得分:1)

我不相信AVPlayerItem应该观察任何事情,如果没有具体的例子,很难说你的情况。通常情况下,您的控制器是来自AVPlayerItem的某些通知的观察者。

例如:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movieItemDidReachEnd:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:nil];

然后当你完成时(即当你将AVPlayerItem设置为nil时),你删除了观察者:

[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil];

如果您提供更多细节,也许我可以提供更多帮助。谢谢!

修改

在swift中它会......

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "movieDidReachEnd", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)

    NSNotificationCenter.defaultCenter().removeObserver(self, name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)

答案 1 :(得分:0)

在将playerItem设置为nil之前,请删除观察者:

playerItem.removeObserver(self, forKeyPath: "status")

如果你等到deinit / dealloc,在你已经将playerItem设置为nil后,你就不会再引用它来移除观察者。

答案 2 :(得分:0)

它通过异步

引起了avplayeritem的初始化