iOS 中的 KVO 在多个 类 中及其上下文

KVO in iOS in multiple classes and its context

你好,我正在使用 KVO 来观察 AvPlayer 状态,我在不同的控制器中使用 AVPlayer 的实例,并使用 KVO 观察它们。(前主控制器有播放器及其观察者,类别控制器有播放器及其观察者, ETC)。 我有一个集中的 class 常量,我把像这样的观察者竞赛放在里面:

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 中,当 class(ViewController) 被查看、访问、viewWillAppeard 或 viewWillDissapeared 使用常量文件中的相同上下文时,我添加和删除观察者。

我的问题是:对于每个 class 包含玩家观察者的集中常量文件使用相同的上下文是没问题的,或者每个 class 都应该有自己独特的上下文class?.

非常感谢任何帮助。 问候

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

注意 :一次只能播放一个 sound/video 所以即使它对于不同的视图控制器不同然后使用相同的全局 AVPlayer 来这样做。

如何实现?

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

错误的使用习惯:为每个视图控制器创建一个新的 AVPlayer 及其 KVO,这将很难处理。