2012-10-31 16 views
5

Pracuję nad aplikacją Iphone (ios5 + scenorys + łuk). Mam 2 ViewControllers A i B.Wyślij powiadomienie do innego kontrolera widoku, gdy żądanie kończy się

W A Mam przycisk. po naciśnięciu wysyłam żądanie asynchronicznie do serwera (za pomocą AFNetworking) i przejdę do View Controller B przy użyciu performSegueWithIdentifier (push not modal).

Po zakończeniu żądania wykonuje żądanie pomyślne Zablokuj, który zapisze dane w bazie danych. (Blok jest w ViewController A, ponieważ żądanie jest wysyłane stamtąd)

Czy jest sposób, w jaki mogę powiadomić ViewController B, że żądanie zostało zakończone i wykonać metodę w B?

Czego szukam, to gdy żądanie kończy się i wchodzi do bloku sukcesów, uruchamiam metodę w widoku kontrolera B, który jest załadowanym widokiem.

Mam nadzieję, że było jasne.

Dzięki

Odpowiedz

12

do wysyłania powiadomienia użyć poniższy kod:

[[NSNotificationCenter defaultCenter] postNotificationName:@"Midhun" object:nil]; 

W viewDidLoad klasy powiadomienie odsłuchu dodać obserwator jak:

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

performTask: jest metoda, która będzie być wywołane, gdy powiadomienie jest przestrzegane.

Zapoznaj NSNotification Class Reference

+0

Dziękuję, proszę pana. To zadziałało jak wdzięk – Youssef

+0

Przy okazji musiałem napisać metodę bez dwóch punktów (:) żeby zadziałać. to się z nimi zepsuło. – Youssef

+1

Przepraszam, koleś. Zapomniałem wspomnieć. Jeśli przekazujesz dowolny parametr, musisz to zrobić:. Lepiej jest zadeklarować funkcję jak '- (void) performTask: (id) nadawca' :) –

1

pierwszych opcji jest przechowywać odniesienie do kontrolera B obejrzeć gdzieś (jak przykładowo w delegata aplikacji) i używać go do uruchomienia metody.

Drugim jest, aby wysłać zgłoszenie za pośrednictwem [NSNotificationCenter defaultCenter], więc kontroler B ustawić słuchacza na powiadomienie gdzieś (viewDidLoad może być dobrym miejscem):

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

i controlle A wysyła go:

[[NSNotificationCenter defaultCenter] postNotificationName:@"requestfinishes" object:nil userInfo:nil]; 

Pamiętaj, że jeśli wysyłasz powiadomienie z innego wątku, detektor zostanie wykonany w tym samym wątku.

Powiązane problemy