這就是我親自做的,在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'可能會工作 –