【问题标题】:KVO AVPlayer.status in SwiftSwift 中的 KVO AVPlayer.status
【发布时间】:2017-08-16 21:04:30
【问题描述】:

我需要观察 AVPlayer.status 的变化。

我有一个 AVPlayer 实例和一个 context 变量

private var lastPlayer : AVPlayer?
private var playerStatusContext = 0

设置 AVPlayer 实例后,我添加了一个 observer,如下所示:

//  KVO status property
self.lastPlayer!.addObserver(self, forKeyPath: "status", options: [.new, .initial], context: &playerStatusContext)

然后我重写了 observeValue 函数,如下所示:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
{
    let status : AVPlayerStatus? = change?[.newKey] as? AVPlayerStatus
    if(status != nil && context == &playerStatusContext)
    {
        //  DO MY STUFF
    }
}

问题是 change 是 0 键/值字典或一些(无论这意味着什么),而我的本地 status 常量始终是 nil,所以我不能做我的事。

也许我将 change 转换为 AVPlayerStatus 错误?请帮忙。谢谢。

【问题讨论】:

  • 在observeValue 方法中打印change。你看到了什么?

标签: ios swift avplayer key-value-observing


【解决方案1】:

嗯,好像是这样的演员表

let status : AVPlayerStatus? = change?[.newKey] as? AVPlayerStatus

不起作用。该应用程序在尝试检查零更改然后强制解包时崩溃。使用原始值有帮助:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
{
    //  Check status
    if keyPath == "status" && context == &playerStatusContext && change != nil
    {
        let status = change![.newKey] as! Int
        //  Status is not unknown
        if(status != AVPlayerStatus.unknown.rawValue)
        {
            //  DO STUFF!!!
        }
    }
}

我不确定这是不是最好的方法。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多