这就是我亲自做的,在AppDelegate中做了didFinishLaunchingWithOptions。
if UserManager.sharedManager.currentUser != nil {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let viewController = storyboard.instantiateInitialViewController()
appDelegate.window?.rootViewController = viewController
} else {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let storyboard = UIStoryboard(name: "Login", bundle: Bundle.main)
let viewController = storyboard.instantiateInitialViewController()
appDelegate.window?.rootViewController = viewController
}
当然,我有,如果用户在或没有登录它处理一个的UserManager。(的UserManager:NSObject的)
var currentUser: User? {
return User.unarchiveStoredUser()
}
用户存储有解码器被分为UserDefautls然后未归档到验证用户是否是否已登录(用户:NSObject)
func archiveUser() {
let data = NSKeyedArchiver.archivedData(withRootObject: self)
UserDefaults.standard.set(data, forKey: "userIdentifier")
UserDefaults.standard.synchronize()
}
class func unarchiveStoredUser() -> User? {
if let data = UserDefaults.standard.object(forKey: "userIdentifier") as? Data {
let user = NSKeyedUnarchiver.unarchiveObject(with: data) as! User
return user
}
return nil
}
希望它可以帮助你。
我相信,Firebase使用此API下方的UserDefaults或CoreData。我用同样的方式,从来没有任何问题。 –
是的,但唯一的问题是快速显示主屏幕,然后在登录屏幕上执行segue,我猜这是因为它在viewdidApepar方法中,所以代码在viewcontroller出现后执行。你知道解决方案吗? –
使用'viewWillAppear'可能会工作 –