Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过NSKeyValueObservation观察到的AVPlayer值始终为零_Ios_Swift_Avfoundation_Avplayer_Key Value Observing - Fatal编程技术网

Ios 通过NSKeyValueObservation观察到的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){

我正在写关于AVPlayer的文章。考虑下面的例子(完整的源代码可用):

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
对象中缺少值。