Я новичок в программировании и быстроте, и я пытался прочитать некоторые решения в переполнении стека, но, честно говоря, я не очень понимаю ответ :(
У меня есть 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")
}
}
а вот мой логинVC
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 на HomeVC: 0x7fc3155095c0, вид которого не находится в иерархии окон!
конечно проблема в этих строках кода
let login = self.storyboard?.instantiateViewController(withIdentifier: "login") as! LoginVC
self.present(login, animated: true, completion: nil)
насколько я знаю, если представление сложено в слое контроллера навигации, то, если я хочу перейти к другому контроллеру представления, я должен использовать метод perform segue
.
Но для этого случая между homeVC и LoginVC не укладывается один и тот же навигационный контроллер. так что никакой иерархии. Вот почему я использую эту строку кода для перехода к другому контроллеру представления (loginVC). но я не понимаю, почему сказано, что "представление не находится в иерархии окон!"
Итак, что мне делать, чтобы пропустить это предупреждение?