Статус AVPlayer: сообщение получено, но не обработано

Я новичок в наблюдателях и Swift/ObjC, и я пытаюсь отслеживать статус AVPlayer, используя один из них, как указано в документации Apple, но все, что я получаю, это "сообщение было получено, но не обработано" сообщение об ошибке при попытке добавить наблюдателя.

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

Если я отменяю регистрацию наблюдателя, ошибка исчезает, но если я добавляю println("test") внутрь функции observeValueForKeyPath, ничего не происходит.

Любая идея о том, как я могу отслеживать статус простым способом?


person Greensouth    schedule 15.02.2015    source источник
comment
какой у тебя observeValueForKeyPath код   -  person Bot    schedule 21.03.2015
comment
Вы сделали супервызов, такой как [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; ? Я думаю, что проблема может существовать, если ваш супер не совместим с KVO. Попробуйте прокомментировать код.   -  person GoGreen    schedule 13.05.2015
comment
у тебя есть решение? У меня такая же проблема.   -  person Ruchi    schedule 21.10.2019


Ответы (2)


Пожалуйста, проверьте метод Observer, который у вас переопределен. Это должен быть метод экземпляра, а не метод класса.

person Martin    schedule 13.12.2019
comment
это была именно моя проблема: - person Gal Blank; 21.08.2020

вот ответ кому еще надо 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)
}
person Gal Blank    schedule 21.08.2020