Ios 通过NSKeyValueObservation观察到的AVPlayer值始终为零
我正在写关于AVPlayer的文章。考虑下面的例子(完整的源代码可用):Ios 通过NSKeyValueObservation观察到的AVPlayer值始终为零,ios,swift,avfoundation,avplayer,key-value-observing,Ios,Swift,Avfoundation,Avplayer,Key Value Observing,我正在写关于AVPlayer的文章。考虑下面的例子(完整的源代码可用): private final class playratasubscription:订阅,其中S.Input==Float{ // ... 私有var stateObserverToken:NSKeyValueObservation?=nil // ... func请求(uDemand:Subscribers.demand){ // ... stateObserverToken=player.observe(\.rate){
private final class playratasubscription:订阅,其中S.Input==Float{
// ...
私有var stateObserverToken:NSKeyValueObservation?=nil
// ...
func请求(uDemand:Subscribers.demand){
// ...
stateObserverToken=player.observe(\.rate){[弱自我](player,change)中的
打印(更改.oldValue)
打印(change.newValue)
打印(播放速率)
// ...
}
}
// ...
}
当我运行该代码时,change.oldValue
和change.newValue
最终都是零。但是,player.rate
将始终返回正确的速率
当观察:playerItem.status
返回正确的值时,我也经历了同样的情况,而KVO更改的值始终为零。我觉得我应该能够从change
变量中获取旧的/新的值
我是否误用了API?这是AVFoundation中的已知限制吗
更新
经过一些研究,我发现了以下几点:
省略options参数将放弃存储新旧属性值,这将导致oldValue和newValue属性为零
将我的实现更新为以下内容后:
observationToken=observedObject.observed(关键路径,选项:[.old,.new]){[weak self](对象,更改)在中
...
}
一些观察到的关键路径开始正常工作
不幸的是,并不是所有的属性都是空的:根据,
AVPlayerItem.status
应该是可观察的键值,而change.oldValue
和change.newValue
都是空的,这让我感到完全困惑。默认情况下,并非所有属性都是可观察的键值
例如,在状态的文档中有
此属性是使用键值观察可观察的键值
rate
中缺少该行。默认情况下,并非所有属性都是可观察的键值
例如,在状态的文档中有
此属性是使用键值观察可观察的键值
这一行在rate
中缺失,我在观察playerItem
的状态
属性(可观察的关键值)时也经历了同样的行为,所以我不确定这是不是。有趣的是,KVO回调被触发,但是change
对象中缺少值。我在观察playerItem
的status
属性(可观察的键值)时也经历了相同的行为,所以我不确定这是不是。有趣的是,KVO回调被触发,但是change
对象中缺少值。