6

Ben NSNotificationCenter kafamı almaya çalışıyorum. Benim App Delegesi böyle bir şey varsa:Başka bir sınıftan NSNotification'ı izleyebilir miyim?

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

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

} 

ben bir şekilde başka bir görünüm denetleyicisi bu izleyebilir miyim? Benim durumumda, bir tablo ile bir görünüm denetleyicisinde izlemek ve bir bildirim alındığında tabloyu yeniden yüklemek istiyorum. Mümkün mü?

cevap

4

Evet, NSNotification'un tüm amacı budur, yalnızca App Delegate'ınızda yaptığınız gibi bir gözlemci olarak istediğiniz Görünüm Denetleyicisini eklemeniz ve bildirimi alabilmesi gerekir.

Daha fazla bilgiyi burada bulabilirsiniz: bu mümkün

+1

Bu sayede istediğim kadar görüntü denetleyicisine ekleyebilir miyim? – cannyboy

+1

Bu doğru. istediğiniz kadar – mopsled

+2

@Cannyboy Evet tek bir bildirime kadar çok gözlemci ekleyebilir. –

2

Tabii Notification Programming ki bildirimlerin nokta bu. addObserver:selector:name:object: kullanarak (eğer tablo görünümü kumandam yapmalısınız) bildirimleri almak için kayıt ve herhangi bir sınıfından bir bildirim göndermek için postNotificationName:object:userInfo: kullanabilirsiniz nasıl.

fazla bilgi için Notofication Programming Topics okuyun.

13

Evet bunu şöyle yapabiliriz:

sınıf A'da: Sınıf B'de bildirim

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

sonrası: bildirim için ilk kayıt ve çözmenin bir yöntem yazmak. İlgili seçiciyi yönteme verirsiniz.

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


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

ve sonra gözlemciyi nereden çıkarabilirim? – Jatin

1

sadece bir Observer olarak eklemek ve bu bildirim yayınlandığında viewController farklı davranmaya olduğunu istiyorsanız farklı bir selector yöntemi vermelidir.

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


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

} 
2

Bildirimleri istediğiniz sayıda sınıfta gözlemlemek için kaydolabilirsiniz. Sadece "durulama ve tekrarlama" yapmanız gerekir. senin yönteminden tableView yeniden sonra (belki :) viewWillAppear daki görünümü denetleyicisi gözlemci olarak kayıt ve kod ekleyin:

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

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

Bu iyi bir fikir de var artık size bir kez görünümü denetleyicisi de-kayıt bildirimlere gereksinim duyulur:

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