Observador de AV Player en Swift: se recibió el post pero no se manejó

Estoy intentando implementar un observador para AV Player en Swift puro.

Recibo el post de error recibido pero no controlado. ¿Es porque el argumento del object en el constructor del observador que estoy usando es nulo?

Coloqué mi código de ejemplo a continuación.

Gracias

player.addObserver(self, forKeyPath: "status", options:NSKeyValueObservingOptions(), context: nil) player.addObserver(self, forKeyPath: "playbackBufferEmpty", options:NSKeyValueObservingOptions(), context: nil) player.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options:NSKeyValueObservingOptions(), context: nil) player.addObserver(self, forKeyPath: "loadedTimeRanges", options: NSKeyValueObservingOptions(), context: nil) private func deallocObservers(player: AVPlayer) { player.removeObserver(self, forKeyPath: "status") player.removeObserver(self, forKeyPath: "playbackBufferEmpty") player.removeObserver(self, forKeyPath: "playbackLikelyToKeepUp") } //observer for av play override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if keyPath == "status" { print("Change at keyPath = \(keyPath) for \(object)") } if keyPath == "playbackBufferEmpty" { print("playbackBufferEmpty - Change at keyPath = \(keyPath) for \(object)") } if keyPath == "playbackLikelyToKeepUp" { print("Change at keyPath = \(keyPath) for \(object)") } } 

Normalmente, este problema ocurre cuando el observador registrado se desasigna y un evento KVO se dispara después de eso. Para la reparación, debe eliminar todos los observadores antes de que su object sea desasignado.

En su caso, se registró para 4 cambios de KVO y eliminó solo 3. El siguiente observador de KVO no se elimina en ninguna parte y está causando el problema.

 player.addObserver(self, forKeyPath: "loadedTimeRanges", options: NSKeyValueObservingOptions(), context: nil) 

Cambie su deallocObservers: método como:

 private func deallocObservers(player: AVPlayer) { player.removeObserver(self, forKeyPath: "status") player.removeObserver(self, forKeyPath: "playbackBufferEmpty") player.removeObserver(self, forKeyPath: "playbackLikelyToKeepUp") player.removeObserver(self, forKeyPath: "loadedTimeRanges") } 

Solucioné el problema después de replace el método.

  override func addObserver(_ observer: NSObject, forKeyPath keyPath: String, options: NSKeyValueObservingOptions = [], context: UnsafeMutableRawPointer?) {} 

A

  override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {}