Я создаю приложение iOS с помощью раскадровки. Контроллер корневого представления представляет собой контроллер панели вкладок. Я создаю процесс входа/выхода из системы, и он в основном работает нормально, но у меня есть несколько проблем. Мне нужно знать ЛУЧШИЙ способ установить все это.
Я хочу выполнить следующее:
- Показать экран входа в систему при первом запуске приложения. Когда они войдут в систему, перейдите на первую вкладку контроллера панели вкладок.
- При каждом запуске приложения после этого проверьте, вошли ли они в систему, и пропустите прямо к первой вкладке корневого контроллера панели.
- Когда они вручную нажимают кнопку выхода из системы, показывают экран входа в систему и очищают все данные от контроллеров представления.
То, что я сделал до сих пор, - установить контроллер корневого представления в контроллер панели вкладок и создать пользовательский сеанс для моего контроллера входа в систему. Внутри моего класса "Контроллер панели вкладок" я проверяю, вошли ли они внутри метода viewDidAppear
, и выполните сеанс: [self performSegueWithIdentifier:@"pushLogin" sender:self];
Я также настраиваю уведомление о том, когда необходимо выполнить действие выхода из системы: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(logoutAccount) name:@"logoutAccount" object:nil];
При выходе из системы я удаляю учетные данные из Keychain, запускаю [self setSelectedIndex:0]
и выполняю segue, чтобы снова отобразить контроллер входа в систему.
Все работает отлично, но мне интересно: должна ли эта логика быть в AppDelegate? У меня также есть две проблемы:
- При первом запуске приложения контроллер панели вкладок показывается ненадолго перед выполнением segue. Я попытался перевести код на
viewWillAppear
, но segue не будет работать так рано. - Когда они выходят из системы, все данные все еще находятся внутри всех контроллеров представления. Если они войдут в новую учетную запись, старые данные учетной записи будут отображаться до тех пор, пока они не будут обновлены. Мне нужно, чтобы это было легко устранить при выходе из системы.
Я готов переработать это. Я рассмотрел возможность сделать экран входа в систему контроллером корневого представления или создать контроллер навигации в AppDelegate для обработки всего... Я просто не уверен, какой лучший метод на данный момент.