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