1

我对观察者和 Swift/ObjC 很陌生,我正在尝试使用 Apple 文档中所说的来监控 AVPlayer 状态,但是当我尝试添加时,我得到的只是“收到消息但未处理”错误消息观察者。

gs_mediaObjAdv=AVPlayer(URL: NSURL(string: mediaURL));
gs_mediaObjAdv.addObserver(self, forKeyPath: "status", options:NSKeyValueObservingOptions.New, context:nil);

如果我取消注册观察者,错误就会消失,但如果我在observeValueForKeyPath函数中添加println("test") ,则不会发生任何事情。

关于如何以简单的方式监控状态的任何想法?

4

2 回答 2

7

请检查您有覆盖的 Observer 方法。它必须是实例方法而不是类方法。

于 2019-12-13T09:13:13.003 回答
0

这是其他需要它的人的答案 Swift 5.1

//playerViewController is defined as a class member 
//let playerViewController = AVPlayerViewController()
self.playerViewController.player!.addObserver(self, forKeyPath: "rate", options: .new, context: nil)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "rate" {
        if let rate = change?[NSKeyValueChangeKey.newKey] as? Float {
            if rate == 0.0 {
                print("playback stopped")
                //view.addSubview(drawView)
            }
            if rate == 1.0 {
                print("normal playback")
            }
            if rate == -1.0 {
                print("reverse playback")
            }
        }
    }
    super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
于 2020-08-21T14:19:30.683 回答