键值观察添加三个观察者来观察单个类值

时间:2013-07-10 12:09:16

标签: objective-c key-value-observing

我有四个类让我们假设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);

}

2 个答案:

答案 0 :(得分:0)

您只需在B,C,D上添加observer一个给定名称,并在每次A中发生某事时发布NSNotification

答案 1 :(得分:0)

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

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