2012-03-13 3 views
8

Sto cercando di chiamare un metodo all'interno di un UIView dal AppDelegate utilizzando il NSNotificationCenter inutilmente ..postNotificationName non chiamando il metodo osservatore

AppDelegate.m

[[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDidComplete" object:items]; 

Poi via MainStoryboard, vista principale è caricata classe quale dispositivo di controllo è MainViewController

in MainViewController.h viewDidLoad ho

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

e quindi il metodo

- (void) ProcessDidComplete:(NSNotification *)pNotification 

ma non viene mai chiamato.

Grazie per qualsiasi aiuto!

+1

Quindi, inviare una notifica, e _after_ che si registra un osservatore per esso? – JiaYow

risposta

15

solo cambiare un modo ..

aggiungere prima osservatore

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

poi post notifica

[[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDidComplete" object:items]; 

rimuovere Infine nel viewWillDisappear

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ProcessDidComplete" object:nil]; 
+1

Woah! è stato veloce. Grazie per la tua risposta. Mi hai indicato nella giusta direzione. postNotificationName viene chiamato prima della creazione l'osservatore, così ora la domanda è .. tenendo conto che carico il viste utilizzando la storyboard, come potrei farlo a addObserver prima di pubblicare il notificacion come postNotificationName viene chiamato in didFinishLaunchingWithOptions di AppDelegate e l'osservatore si aggiunge nel viewDidLoad dal MainView .. grazie in anticipo – spacebiker

+0

non ho implementato storyboard..Better si tenta addobserver nel metodo appdidfinishlaunching. – Rams

4

il codice sia a posto , che mi fa chiedere dove, nella tua app delegata, hai postato la notifica?

Se pubblichi la notifica prima di aggiungere l'osservatore nel controlller vista, quindi la notifica non sarà mai ricevuti. Non è possibile inviare il messaggio alla principale controller della vista direttamente, vale a dire, come una proprietà, piuttosto che usare le notifiche?

+0

Ciao amico, grazie per la risposta. la notifica è post nei didFinishLaunchingWithOptions e l'osservatore viene creato in viewDidLoad del MainView, perché sto usando story board, la MainView viene caricato troppo tardi. Hai qualche suggerimento ? – spacebiker

0

Volevo solo notare qui che i nomi di notifica iOS sono maiuscole e minuscole:

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

non risponderà a:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ScheduleUpdated" object:items]; 

(come ho trascorso gli ultimi 20 minuti per capire. ..)