0

私は約4つのクラスを持っており、A、B、C、およびDを想定しています。今、私のクラスB、C、DはクラスAの値を観察し、値が変化したときに通知を受ける必要があります。クラス B の値を確認しましたが、他の 2 つのクラス 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 に答える