6

Próbuję uzyskać informacje na temat NSNotificationCenter. Jeśli mam coś takiego w moim Delegacie aplikacji:Czy mogę obejrzeć NSNotification z innej klasy?

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

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

} 

Czy mogę to jakoś obejrzeć w innym kontrolerze widoku? W moim przypadku chciałbym obejrzeć go w kontrolce widoku z tabelą, a następnie ponownie załadować tabelę po otrzymaniu powiadomienia. czy to możliwe?

Odpowiedz

4

Tak, możesz to zrobić w całości jako NSNotification, wystarczy, że dodasz kontroler widoku, który chcesz obserwować dokładnie w taki sam sposób, jak zrobiłeś to w swoim Delegacie aplikacji i otrzymasz powiadomienie.

można znaleźć więcej informacji tutaj: Notification Programming

+1

Czy mogę dodać go do wielu kontrolerów widoku, jak sobie życzyłem? – cannyboy

+1

To prawda. – mopsled

+2

@Cannyboy Tak, możesz dodać tylu obserwatorów do jednego powiadomienia, jak chcesz. –

2

Oczywiście jest to możliwe, to cały sens powiadomień. Używanie addObserver:selector:name:object: to sposób rejestrowania się w celu otrzymywania powiadomień (powinieneś to zrobić w kontrolerze widoku tabeli) i możesz użyć postNotificationName:object:userInfo:, aby opublikować powiadomienie z dowolnej klasy.

Przeczytaj Notofication Programming Topics, aby uzyskać więcej informacji.

13

Tak można to zrobić tak:

w klasie A: opublikować zawiadomienie

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

w klasie B: najpierw zarejestrować na powiadomienia i napisać metodę, aby je obsłużyć. Dajesz odpowiedni selektor tej metodzie.

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


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

, a następnie gdzie mogę usunąć obserwatora? – Jatin

1

Należy tylko dodać, że jako Observer i dać inną metodę selector jeśli chcesz tego viewController zachowywać się inaczej, gdy takie powiadomienie jest zamieszczona.

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


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

} 
2

Możesz zarejestrować się, aby obserwować powiadomienia w tylu zajęciach, ile chcesz. Musisz po prostu "spłukać i powtórzyć". Zawierać kod do rejestracji w charakterze obserwatora w kontrolerze widoku (być może w viewWillAppear :), a następnie załaduj tableView od wybranej metody:

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

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

Jest to także dobry pomysł, aby wyrejestrować kontroler widoku Gdy już potrzebujesz powiadomień:

- (void)viewWillDisappear:(BOOL)animated { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
}