1

Testという名前のクラスAにNSNotificationオブザーバーがいます。オブザーバーはメソッドを呼び出し、checker:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checker:) name:@"Test" object:nil];

次に、クラスBとCに2つの投稿があり、どちらもTestという名前のオブザーバーに送信されます。

[[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:self];

どの投稿がオブザーバーに送信されているかを知り、チェックメソッドで使用できるようにカウンターをインクリメントしたいのですが、次のようになります。

-(void)check {
    if ([classB count] <= [classC count]) {
        NSLog(@"boom");
    }
}

userinfoを使用してこれを行うための提案を見てきましたが、その方法がよくわかりません。クラスB/Cでインスタンス化され、intまたはディクショナリなどとして渡されるカウンタオブジェクトです。

どんな助けでも大歓迎ですありがとう

4

3 に答える 3

2

さて、あなたはクラスAにあなたのカウンターを持っている必要があります。あなたがチェッカーでこれをすることができるより:関数

- (void)checker:(NSNotification *)notification
{
    if ([notification.object isKindOfClass:[BClass class]]) {
        bCounter++;
    }
    else if ([notification.object isKindOfClass:[CClass class]]) {
        cCounter++;
    }

    if (bCounter < cCounter) {
        NSLog(@"boom");
    }
}

それがあなたのために働くかどうか私に知らせてください。

于 2011-08-02T17:37:29.720 に答える
1

userInfoディクショナリを渡す方法については、NSNotificationでuserInfoを渡す方法をご覧ください。

できることは、checkメソッドが定義されているクラスに2つのクラスレベル変数を含めることができ、userInfoディクショナリにラップされた通知オブジェクトで送信する識別子に応じて、countClassBとcountClassCの値をインクリメントできます。

于 2011-08-02T17:35:02.240 に答える
0

クラスbとcにそれぞれincrementメソッドを実装することもできます。次に、テストメソッドでincrementメソッド、つまり[notification.objectincrement]を呼び出すだけです。そうすれば、オブジェクトの実際のクラスを気にする必要がありません。bまたはcの実際のカウンターを取得するには、プロパティを使用できます(つまり、クラスaではb.counterまたはc.counterを要求できます)。

于 2013-04-06T16:06:35.260 に答える