观察者未完成时如何将 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 被异步初始化
我在 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
.
例如:
[[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 被异步初始化