1

我有一个基于 Objective-C 中的 NSNotification 的问题:

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

我真的不知道如何设置对象属性...

那么,如果我只想接收来自 a 类的通知,如何将其设置为 a 类?

[A class]

[A alloc]

不工作。

我对对象参数感到非常困惑。

4

3 回答 3

3

如果nil,那么您会收到所有@"SOME_STRING"通知。

如果没有nil,您只会得到与传递给的实例有关的那些object

所以......它不是真正的“来自a类”的关联,它是与特定实例的关联。当实例匹配(观察和发布)时,您会收到通知。

有了这些信息,您可以使用返回的 objc 实例[A class]作为object参数来接收您感兴趣的通知——它看起来像这样:

观察:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(method:)
                                      name:@"SOME_STRING"
                                      object:[A class]];
                                              ^^^^^^^

邮政:

[[NSNotificationCenter defaultCenter]
  postNotificationName:@"SOME_STRING" object:[A class]];
                                              ^^^^^^^
于 2012-08-21T07:31:06.770 回答
2

object参数是你要观察的对象,不能观察一个类。

但是在您的方法中,您可以检查对象类:

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

- (void)method:(NSNotification*)notif
{
    if ([[notif object] isKindOfClass:[A class]]) {
        //...
    }
}
于 2012-08-21T07:32:44.820 回答
0

对于发布通知,您可以使用以下方法:-

[[NSNotificationCenter defaultCenter] postNotificationName:@"testNotification" object:[A class]];

要接收通知,首先在您的 viewDidLoad 方法中添加以下方法:-

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifyWhenCalled:) name:@"testNotification" object:[A class]];

在选择器下方声明。这将在您的通知被触发时调用:-

- (void) notifyWhenCalled:(NSNotification *)notification
{
  if ([[notification object] isKindOfClass:[A class]]) 
  {
    //..... Write your code to do anything.
  }
} 
于 2017-02-07T12:56:27.630 回答