我有四个类让我们假设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);
}
答案 0 :(得分:0)
您只需在B,C,D上添加observer
一个给定名称,并在每次A中发生某事时发布NSNotification
。
答案 1 :(得分:0)
我认为你在实例和类之间有点混淆。观察是基于实例的,因此,当您创建3个不同的ClassA
实例并添加不同的对象作为每个实例的观察者时,它们每个都是单独链接的。因此,当您更新ClassA
的林实例时,只会更新附加到该实例的观察者。
要执行您描述的操作,您应该只实例化ClassA
一次,并在想要观察它的类之间传递实例。然后它们都可以附加到同一个实例,并且在更新时都会收到回调。