NSNotificationCenter:我怎么知道发布通知的内容?

时间:2011-08-02 17:27:40

标签: iphone ios nsnotificationcenter

我在A类中有一个名为Test的NSNotification观察者。观察者调用方法checker:

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

然后我在B和C类中有两个帖子,两个都是名为Test

的观察者
[[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:self];

我希望能够知道哪个帖子被发送给观察者并增加一个计数器以便在check方法中使用,例如:

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

我已经看到过使用userinfo这样做的建议,但我不太清楚如何;是在B / C类中实例化的计数器对象,并作为int或字典等传递

任何帮助非常感谢 感谢

3 个答案:

答案 0 :(得分: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");
    }
}

让我知道它是否适合你。

答案 1 :(得分:1)

有关如何传递userInfo字典,您可以访问How to pass userInfo in NSNotification?

你可以做的是,你可以在定义了check方法的类中有两个类级变量,然后根据你用userInfo字典中包含的通知对象发送的标识符,你可以增加countClassB和countClassC的值。 。

答案 2 :(得分:0)

您还可以分别在类b和c中实现增量方法。然后在你的测试方法中只调用increment方法,即[notification.object increment]。这样您就不必关心对象的实际类。要获得b或c的实际计数器,你可以使用属性(即在课程中你可以要求b.counter或c.counter)。