【问题标题】:Key Value Observing add three observers to observe a single class valueKey Value Observing 添加三个观察者来观察单个类值
【发布时间】:2013-07-10 12:09:16
【问题描述】:

我有大约四个类让我们假设 A、B、C 和 D,现在我的类 B、C、D 需要观察类 A 的值并在值发生变化时得到通知。我已经观察到 B 类中的值,但我无法在其他两个类中得到通知,比如 C 和 D。 提前谢谢..

- (void)viewDidLoad

{
   [super viewDidLoad];

    newClassAToBeObserved=[[ClassATobeObserved alloc]init];
    [newClassAToBeObserved addObserver:self forKeyPath:@"StatusToken" options:NSKeyValueObservingOptionNew context:NULL];

    ClassB*classB=[[ClassB alloc]init];
    [classB func];

    ClassC*classc=[[ClassC alloc]init];
    [classc func];

}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{

    if ([keyPath isEqualToString:@"StatusToken"])
    {
        NSLog(@"changed value is : %@",[object valueForKeyPath:keyPath]);
    }
}


-(IBAction)ClickIt

{

 [newClassAToBeObserved setStatusToken:@"TokenExpired"];

 NSLog(@"Value-->%@",newClassAToBeObserved.StatusToken);

}

【问题讨论】:

  • 显示代码。有效和无效之间有什么区别?
  • 等一下,我现在就添加代码
  • 您只是将self 添加为观察者...
  • 我在 B 类(“[classB func];”)和 C 类(“[classC func];”)的 func 中注册观察者。
  • 不传递newClassAToBeObserved作为参数怎么办?

标签: objective-c key-value-observing


【解决方案1】:

您只需在 B、C、D 上添加一个具有给定名称的 observer,然后每次在 A 中发生某些事情时发布一个 NSNotification

【讨论】:

  • 我目前正在使用 KVO 来观察值
【解决方案2】:

我认为您在实例和类之间有些混淆了。观察是基于实例的,因此,当您创建 3 个不同的 ClassA 实例并添加一个不同的对象作为每个实例的观察者时,它们每个都是单独链接的。因此,当您更新 ClassA 的森林实例时,只会更新附加到该实例的观察者。

要按照您的描述进行,您应该只实例化一次 ClassA 并在想要观察它的类之间传递实例。然后它们都可以附加到同一个实例,并且在更新时都会收到回调。

【讨论】:

    猜你喜欢
    • 2012-11-09
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多