【发布时间】:2018-06-27 10:55:03
【问题描述】:
我是编程和 swift 方面的新手,我曾尝试阅读堆栈溢出中的一些解决方案,但老实说,我并没有真正掌握答案:(
我有 2 个视图控制器。一个 homeVC 和一个 LoginVC。 homeVC 是我的初始视图控制器。在viewDidLoad 我有firebase 功能,可以检查用户之前是否登录过。如果没有,那么用户将被发送到 loginVC。这是我在 HomeVC 中的简化代码
import UIKit
import Firebase
class HomeVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// to check whether the user has already logged in or not
Auth.auth().addStateDidChangeListener { (auth, user) in
if user == nil {
let login = self.storyboard?.instantiateViewController(withIdentifier: "login") as! LoginVC
self.present(login, animated: true, completion: nil)
}
}
print("user enter homeVC")
}
}
这是我的 loginVC
import UIKit
import Firebase
import GoogleSignIn
class LoginVC : UIViewController, GIDSignInUIDelegate {
@IBOutlet weak var googleButton: GIDSignInButton!
@IBOutlet weak var emailButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// delegate declaration
GIDSignIn.sharedInstance().uiDelegate = self
}
@IBAction func googleButtonDidPressed(_ sender: Any) {
GIDSignIn.sharedInstance().signIn()
}
}
该应用程序可以按我预期的方式运行。但在我的调试区有一个警告:
警告:尝试显示 LoginVC: 0x7fc315714f40 on HomeVC: 0x7fc3155095c0 其视图不在窗口中 等级制度!
当然问题出在这行代码
let login = self.storyboard?.instantiateViewController(withIdentifier: "login") as! LoginVC
self.present(login, animated: true, completion: nil)
据我所知,如果视图堆叠在导航控制器层,那么如果我想移动到另一个视图控制器,我必须使用perform segue方法。
但是对于这种情况,homeVC 和 LoginVC 之间并没有堆叠在同一个导航控制器中。所以没有层次结构。这就是为什么我使用那行代码移动到另一个视图控制器(loginVC)。但我不明白为什么说“视图不在窗口层次结构中!”
那么我应该怎么做才能忽略该警告?
【问题讨论】:
-
viewDidLoad 中的视图尚未准备好。在 viewDidAppear 中尝试相同的代码
标签: ios swift xcode uiviewcontroller swift4