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,这将很难处理。
你好,我正在使用 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,这将很难处理。