PresentViewController显示我的RootViewController

时间:2016-12-07 22:11:08

标签: ios swift xcode

让我解释一下。 我有两个ViewControllers(Login-Page和Main-Page)。 登录页面包含两个按钮(FB和G +登录按钮)。 使用登录凭据一切正常,并呈现下一个主页面视图。 在Main-Page中我有按钮(注销).Button应该像唱歌一样工作并将我带回Login-Page,遗憾的是不能正常工作。 以下是我的代码

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

并且Main-Page

中所有已声明的IBOutlet的输出为nil

我需要帮助!!! ??

2 个答案:

答案 0 :(得分: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)
} 

答案 1 :(得分: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)

这样,您将替换登录视图控制器的呈现视图控制器。