2016-12-07 3 views
0

Итак, позвольте мне объяснить. У меня есть два ViewControllers (Login-Page и Main-Page). Страница входа содержит две кнопки (кнопки входа FB и G +). Все работает нормально с регистрационными данными и представляет следующее представление, которое является главной страницей. На главной странице У меня есть кнопка (выключение). Батон должен работать как пение и возвращать меня на страницу входа, к сожалению, не работает. Ниже мой кодPresentViewController показывает ноль моего RootViewController

let vc = self.storyboard?.instantiateViewController(withIdentifier: "LoginPage") as! LoginPage 
      vc.modalTransitionStyle = UIModalTransitionStyle.crossDissolve 
      self.present(vc, animated: true, completion: nil) 

показывает

fatal error: unexpectedly found nil while unwrapping an Optional value 

и выход равен нулю для всех объявленных IBOutlet в Main-Page

Пожалуйста, мне нужна помощь !!! ??

+0

Дважды проверьте идентификатор раскадровки вашего контроллера входа в систему. Он должен соответствовать «LoginPage» точно, случай, без пробелов. Кроме того, он должен находиться в одной и той же раскадровке. – picciano

+0

не опечатка вопроса ... Другое дело, что когда я изменить код: пусть LoginControllerx = LoginPage() UIApplication.shared.keyWindow .rootViewController = UINavigationController (RootViewController: LoginControllerx)? Это показывает IBOutlet Нил LoginPage :( –

+0

@EdisShabixhiza одна из возможных проблем заключается в том, что у вас есть выход, который не подключен. – i6x86

ответ

0

Сначала проверим, если контроллер представления имеет Storyboard ID на Identity inspector:

enter image description here

Тогда:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let loginViewController = storyboard.instantiateViewController(withIdentifier: "LoginPage") 

let window = UIApplication.shared.windows[0] as UIWindow 

UIView.transition(with: window, 
        duration: 0.5, 
        options: UIViewAnimationOptions.transitionCrossDissolve, 
        animations: { 
         window.rootViewController = loginViewController 
     }, completion: nil) 

При том, что вы заменяете представленный контроллер представления для контроллера представления Логина.

+0

@pablerios god пришлите вам :) –

+0

Привет @EdisShabixhiza, если этот или любой ответ разрешил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – pableiros

0

Попробуйте использовать оповещения, чтобы изменить корень при выходе из системы для приложения.

Сначала в вашем AppDelegate addObserver:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // Notification used in logout action 
    let notf = NSNotificationCenter.defaultCenter() 
    notf.addObserverForName("logout", object: nil, queue: NSOperationQueue.mainQueue()) { (notification) in 
     let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("LoginPage") as! LoginPage 
     self.window?.rootViewController = controller 
    } 
    return true 
} 

затем в logoutAction просто postNotification

func logout() { 
    NSNotificationCenter.defaultCenter().postNotificationName("logout", object: nil) 
} 
+0

Я попробую этот вариант также :), сообщите вам о результатах –

Смежные вопросы