【问题标题】:NSNotificationCenter: how can I tell what posted the notification?NSNotificationCenter:我怎么知道是什么发布了通知?
【发布时间】:2013-04-07 00:06:35
【问题描述】:

我在 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");
    }
}

我已经看到了使用用户信息的建议,但我不太确定如何使用;是在 B/C 类中实例化的计数器对象,并作为 int 或字典等传递

非常感谢任何帮助 谢谢

【问题讨论】:

    标签: iphone ios nsnotificationcenter


    【解决方案1】:

    好吧,你需要在 A 类中设置你的计数器。而不是你可以在 checker: function 中执行此操作

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

    让我知道它是否适合你。

    【讨论】:

    • 我想这就是我一直在寻找的东西,我会让你知道结果如何。谢谢!
    • 我会接受这个,因为它几乎就是我要找的东西 :) 只有一件事让我烦恼,我不确定这是否只是我度过了愚蠢的一天,但是当我在全球范围内声明 bCounter 和 cCounter在 ClassA 中,他们似乎给了我离谱的数字,而不是从 0 开始。您对如何保留计数器计数有什么建议吗?当应用程序重新启动时,它们会返回 0 或其他值。正如我所说,我有一个愚蠢的一天:)
    • @Elmo:在 C 语言中,如果你声明一个变量但不给它赋值,它只会有当时内存中发生的任何值。与 Java 不同,C 不会为您清理。 (除了对象实例变量,在分配实例时它们被清零。)尝试static int bCounter = 0;作为你的全局变量。
    【解决方案2】:

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

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

    【讨论】:

    • 酷我会调查的。感谢您的快速回复:)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多