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

How to set AVPlayerItem to nil when observer does not complete

我在 AVPlayerItem 中添加了一个名为“status”的 observer。 发送观察者然后在观察者未完成时将 AVPlayerItem 设置为 nil

我在 dealloc AVPlayerItem 时移除了观察者

得到以下错误:

NSInternalInconsistencyException', reason: 'An instance 0x7dc5e7d0 of class AVPlayerItem was deallocated while key value observers were still registered with it. Current observation info: ( Context: 0x0, Property: 0x7b8ad140>

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

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

如果你等到 deinit/dealloc,在你已经将 playerItem 设置为 nil 之后,你将不再有对它的引用来删除观察者。

我不认为 AVPlayerItem 应该观察任何东西,如果没有具体的例子很难说你的情况。一般来说,这个流程是你的 controller 是来自 AVPlayerItem.

的一些 notification 的观察者

例如:

[[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)

它导致 avplayeritem 被异步初始化