Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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中的多类KVO及其上下文_Ios_Avplayer_Key Value Observing_Kvocontroller - Fatal编程技术网

iOS中的多类KVO及其上下文

iOS中的多类KVO及其上下文,ios,avplayer,key-value-observing,kvocontroller,Ios,Avplayer,Key Value Observing,Kvocontroller,大家好,我正在使用KVO观察AvPlayer状态,我在不同的控制器中使用AvPlayer实例,并使用GN KVO观察它们。(前主控制器有player及其观察员,类别控制器有player及其观察员,等等)。 我有一个集中的常量类,我在其中放置obsever竞赛,如: static void const *kCurrentItemDidChangeKVO = &kCurrentItemDidChangeKVO; static void const *kRateDidChangeKVO

大家好,我正在使用KVO观察AvPlayer状态,我在不同的控制器中使用AvPlayer实例,并使用GN KVO观察它们。(前主控制器有player及其观察员,类别控制器有player及其观察员,等等)。 我有一个集中的常量类,我在其中放置obsever竞赛,如:

static void const *kCurrentItemDidChangeKVO  = &kCurrentItemDidChangeKVO;
static void const *kRateDidChangeKVO         = &kRateDidChangeKVO;
static void const *kStatusDidChangeKVO       = &kStatusDidChangeKVO;
在每个控制器中,我添加了如下观察者:

 if (player != nil)
    {
        [player addObserver:self forKeyPath:@"rate"                            options:NSKeyValueObservingOptionNew context:&kRateDidChangeKVO];
        [player addObserver:self forKeyPath:@"currentItem.status"              options:NSKeyValueObservingOptionNew context:&kStatusDidChangeKVO];
        [player addObserver:self forKeyPath:@"currentItem.duration"            options:NSKeyValueObservingOptionNew context:&kDurationDidChangeKVO];
    }
并移除每个控制器中的观察者,如:

if (player != nil)
    {
            [player  removeObserver:self forKeyPath:@"rate" context:&kRateDidChangeKVO];
            [player  removeObserver:self forKeyPath:@"currentItem.status" context:&kStatusDidChangeKVO];
            [player  removeObserver:self forKeyPath:@"currentItem.duration" context:&kDurationDidChangeKVO];
    }
在每个
AVPlayer
中,当使用常量文件中的相同上下文查看、访问该类(ViewController)、viewWillAppeard或ViewWillDissaped时,我添加和删除观察者

我的问题是:可以为每个包含玩家观察者的类使用集中常量文件中的相同上下文,或者每个类是否应该为该类使用其自己的唯一上下文?

非常感谢您的帮助。

视为最佳使用:创建一个全局AVPlayer及其KVO并在应用程序中使用,因为它在应用程序的后台和前台状态下易于管理且易于使用

注意:一次只能播放一个声音/视频,因此即使不同视图控制器的声音/视频不同,也可以使用同一个全局AVPlayer执行此操作

如何做到这一点?

在不同的视图控制器中使用全局AVPlayer实例的简单规则是,在再次添加AVPlayer的不同视图控制器中使用之前,删除添加的AVPlayer视图


使用不当:为难以处理的每个视图控制器创建一个新的AVPlayer及其KVO。

最好的用途是创建一个全局AVPlayer及其KVO,并在应用程序中使用,因为它在应用程序的后台和前台状态下易于管理,而不是创建一个新的AVPlayer及其KVOKVO用于每个视图控制器,这是一个糟糕的使用实践。感谢您提供的信息,这里是交易,我有一个基于选项卡的应用程序AVPlayer应该在第一个选项卡中播放视频如果我转到选项卡3,我必须在控制器出现时播放另一个视频,并在控制器消失时在第一个选项卡中暂停播放器,是否有可能通过这种方式在全球范围内创建AVPlayer及其KVO?请让我知道,这样我就可以接受你提供的解决方案。是的,在不同的视图控制器中使用global AVPlayer的实例是有可能的,简单的规则是,在再次添加的不同视图控制器中使用之前,删除添加的AVPlayer的视图。非常感谢,你有我可以参考的实际示例代码吗,那将非常有帮助。:)不,我没有任何示例代码,但我在一个应用程序中使用过,它在后台播放视频,在应用程序中的任何地方都可以找到当前正在播放的视频。我认为SCPlayer是一个很好的示例:),您不同意吗:)。接受你正确的答案。