0

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

}
4

2 回答 2

0

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

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

于 2013-07-11T06:26:16.930 回答
0

您只需observer在 B、C、D 上添加一个具有给定名称的名称,并NSNotification在 A 中发生任何事情时发布一个。

于 2013-07-10T12:19:58.960 回答