iOS中的多类KVO及其上下文
大家好,我正在使用KVO观察AvPlayer状态,我在不同的控制器中使用AvPlayer实例,并使用GN KVO观察它们。(前主控制器有player及其观察员,类别控制器有player及其观察员,等等)。 我有一个集中的常量类,我在其中放置obsever竞赛,如: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
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是一个很好的示例:),您不同意吗:)。接受你正确的答案。