1

Objective-C の NSNotification に基づいて質問があります。

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

オブジェクト属性の設定方法が本当にわかりません...

では、クラス a からの通知のみを受け取りたい場合、どうすればクラス a に設定できますか?

[A class]

[A alloc]

動作しません。

object パラメーターについて非常に混乱しています。

4

3 に答える 3

3

の場合nil、すべての@"SOME_STRING"通知が送信されます。

そうでない場合はnil、渡されたインスタンスに関連するものだけを取得しますobject

だから...それは実際には「クラスaからの」関連付けではなく、特定のインスタンスへの関連付けです。インスタンスが一致すると (監視と投稿)、通知されます。

[A class]その情報を使用して、必要な通知を受け取るためにパラメーターとして返された objc インスタンスを使用できます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

オブジェクトパラメータは監視したいオブジェクトであり、クラスを監視することはできません。

ただし、メソッドでは、オブジェクトクラスを確認できます。

[[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 に答える