Buduję aplikację na iOS za pomocą Storyboard. Kontroler widoku głównego jest kontrolerem paska kart. Tworzę proces logowania / wylogowywania, i to w większości działa dobrze, ale mam kilka problemów. Muszę znać NAJLEPSZY sposób na skonfigurowanie tego wszystkiego.
Chcę wykonać następujące czynności:
- Pokaż ekran logowania przy pierwszym uruchomieniu aplikacji. Po zalogowaniu przejdź do pierwszej karty Kontrolera paska kart.
- Za każdym razem, gdy uruchamiają aplikację, sprawdź, czy są zalogowani i przejdź bezpośrednio do pierwszej karty głównego kontrolera paska kart.
- Kiedy ręcznie klikną przycisk wylogowania, pokaż ekran logowania i usuń wszystkie dane z kontrolerów widoku.
Do tej pory ustawiłem kontroler widoku głównego na kontroler paska kart i utworzyłem niestandardowy segment dla mojego kontrolera widoku logowania. W mojej klasie Tab Bar Controller sprawdzam, czy są zalogowani w viewDidAppear
metodzie, i wykonuję segue:[self performSegueWithIdentifier:@"pushLogin" sender:self];
Ustawiam również powiadomienie, kiedy należy wykonać akcję wylogowania: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(logoutAccount) name:@"logoutAccount" object:nil];
Po wylogowaniu usuwam dane uwierzytelniające z pęku kluczy, uruchamiam [self setSelectedIndex:0]
i wykonuję segue, aby ponownie wyświetlić kontroler widoku logowania.
To wszystko działa dobrze, ale zastanawiam się: czy ta logika powinna być w AppDelegate? Mam również dwa problemy:
- Przy pierwszym uruchomieniu aplikacji kontroler paska kart wyświetla się krótko przed wykonaniem segue. Próbowałem przenieść kod do,
viewWillAppear
ale segue nie zadziała tak wcześnie. - Po wylogowaniu wszystkie dane nadal znajdują się we wszystkich kontrolerach widoku. Jeśli zalogują się na nowe konto, dane starego konta będą nadal wyświetlane, dopóki nie zostaną odświeżone. Potrzebuję sposobu, aby to łatwo usunąć przy wylogowaniu.
Jestem otwarty na przeróbkę tego. Rozważyłem uczynienie ekranu logowania głównym kontrolerem widoku lub utworzenie kontrolera nawigacyjnego w AppDelegate do obsługi wszystkiego ... Po prostu nie jestem pewien, jaka jest najlepsza metoda w tym momencie.