6

私はNSNotificationCenterの周りに頭を上げようとしています。私は私のアプリの委任でこのような何かを持っている場合:別のクラスのNSNotificationを見ることはできますか?

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

-(void)something:(NSNotification *) notification 
{ 
    // do something 

} 

は私が何とか別のビューコントローラでこれを見ることができますか?私の場合は、テーブルがあるView Controllerで監視し、通知を受け取ったときにテーブルをリロードしたいと考えています。これは可能ですか?

答えて

4

はい、それはNSNotificationの目的全体です。オブザーバーとして望むView ControllerをApp Delegateで行ったのとまったく同じように追加するだけで通知を受け取ることができます。

あなたはここでより多くの情報を見つけることができます:もちろんNotification Programming

+1

私はそれを望む数のビューコントローラに追加できますか? – cannyboy

+1

それは正しいです。あなたが望むよう – mopsled

+2

@Cannyboyはい、あなたは、単一の通知にできるだけ多くのオブザーバーを追加することができます。 –

2

をそれが可能だ、それは、通知の全体のポイントです。 addObserver:selector:name:object:を使用すると、通知を受信するために登録する方法(テーブルビューコントローラでこれを行う必要があります)とpostNotificationName:object:userInfo:を使用して、どのクラスからでも通知を送信できます。

詳細はNotofication Programming Topicsをご覧ください。

13

はい、あなたはこのようにそれを行うことができます。

クラスAでは:クラスBに通知

[[NSNotificationCenter defaultCenter] postNotficationName:@"DataUpdated "object:self]; 

を投稿:通知のために最初に登録して、それを処理するための方法を記述します。 対応するセレクタをメソッドに渡します。

//view did load 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdatedData:) name:@"DataUpdated" object:nil]; 


-(void)handleUpdatedData:(NSNotification *)notification { 
    NSLog(@"recieved"); 
} 
+1

、次にオブザーバーを削除しますか? – Jatin

1

はあなただけObserverとしてそれを追加し、その通知がポストされたときviewControllerが異なる動作をすることにしたい場合は、別のselector方法を与える必要があります。

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


-(void)somethingOtherThing:(NSNotification *) notification 
{ 
// do something 

} 
2

あなたは、好きなだけ多くのクラスで通知を観察するために登録することができます。あなたは単にすすぎとリピートする必要があります。これは、登録解除ビューコントローラにあなたはもはや一度のも良い考えです

- (void)viewWillAppear:(BOOL)animated { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(something:) name:@"something" object:nil]; 
} 

-(void)something:(NSNotification *) notification 
{ 
    [self.tableView reloadData]; 
} 

:おそらくviewWillAppearであなたのビューコントローラ(:)にオブザーバーとして登録してあなたの方法からのtableViewを再ロードするためのコードを含めます

- (void)viewWillDisappear:(BOOL)animated { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 
関連する問題