7

Mam delegata/obsługi, które mam zaimplementowane na moim UIViewControllers do obsługi limitów czasu do zdalnego serwisu. Gdy wniosek zostanie złożony do mojego usługa, a zwracana jest timeout kod http, delegat nazywa i wykonuje następujące czynności:self.navigationController jest już po raz drugi ViewController jest ładowany

UINavigationController *navController = self.navigationController; 

if (navController) { 
    [navController popToRootViewControllerAnimated:YES]; 
} else { 
    NSLog(@"navController is null/nil"); 
} 

Gdybym wykonać następujące kroki, navController jest tworzony poprawnie, a akcja popToRootViewController występuje.

  1. uwierzytelnić moją aplikację z usługa na Logowanie ViewController
  2. Auto wywołać segue do CustomMenuViewController
  3. czekać na webservice do Timeout zdalnie
  4. Kliknij aby wywołać segue do CustomSubMenuViewController

Teraz, jeśli wykonam następujące kroki, zostanie uruchomiona klauzula else w powyższym bloku kodu, ponieważ z pewnych powodów navController nie jest poprawnie ustawiony:

  1. uwierzytelnić moją aplikację z usługa na CustomLoginViewController
  2. Auto segue do CustomMenuViewController
  3. Natychmiast kliknij, aby wywołać segue do CustomSubMenuViewController
  4. Kliknij przycisk Wstecz, aby wywołać pop
  5. Poczekaj usługa sieci Web do zdalnego limitu czasu:
  6. Kliknij, aby wywołać przejście na to samo CustomSubMenuViewController

Moje pytanie brzmi: dlaczego po załadowaniu ViewController po raz drugi, czy self.navigationController zwraca null?

Stos wywołań w powyższym przykładzie powinien wyglądać następująco: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController

Dzięki

UPDATE: Nadal nie dokonano żadnych postępów w tej sprawie!

+0

Czy wykluczyć żadnej z przyczyn opisanych w http://stackoverflow.com/a/7767160/1445366 i http://stackoverflow.com/q/1983620/1445366? –

+0

Tak - ja.navigationController jest dostępny, gdy viewController jest ładowany po raz pierwszy, jest tylko zerowy, kiedy od niego odejdziesz, a następnie spróbujesz powrócić do niego po kolei. – doug

+0

Upewnij się, że nie robisz tego null w ViewDidDisappear lub ViewdidUnload – Navi

Odpowiedz

0

Myślę, że mogłeś już rozwiązać to, ale spotkałem dokładnie to samo. I myślę, że możemy robić dokładnie to samo, co przy użyciu Facebooka do logowania. W każdym razie dla kogoś innego w przyszłości może to być przydatne. Problem, który miałem, że ponownie przydzielałem UINavigationController ponownie po powrocie z tła na warunek awarii.

Więc, co możesz zrobić, to spróbuj umieścić punkt przerwania wokół miejsca, w którym zainicjowałeś swój rootViewController dla kontrolera UiNavigationController.

[[UINavigationController alloc] 
     initWithRootViewController:viewController]; and make sure that you do re-initailise your UINavigationController if you have already done it. 
2

Hej, może to zabrzmieć naprawdę prosto, ale czy poprawnie przydzieliłeś obiekt na pasku nawigacyjnym? Może możesz spróbować ustawić jego właściwość jako silną. Być może dlatego, że z czasem zostanie zwolniona.

Powiązane problemy