开func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)
我检查用户是否已登录,如下所示:
let user = KeychainManager().getCurrentUser()
if user.isValid() {
self.redirectToMain()
}
else {
self.redirectToWelcome()
}
这就是getCurrentUser()
方法的样子:
let currentUser = CurrentUser()
currentUser.Id = Int(KeychainWrapper.stringForKey(KeychainKeyConstants.idKeyForKeychain).toNonNullable("0"))
currentUser.email = KeychainWrapper.stringForKey(KeychainKeyConstants.emailKeyForKeychain).toNonNullable("")
// Other properties...
return currentUser
这是我将用户保存到Keyhchain的方式:
let currentUser = CurrentUser()
currentUser.Id = loginModel.Id
currentUser.email = loginModel.email
// Some other properties...
KeychainManager().saveCurrentUser(currentUser)
这就是saveCurrentUser()
方法的样子:
KeychainWrapper.setObject(user.Id!, forKey: KeychainKeyConstants.idKeyForKeychain)
KeychainWrapper.setString(user.email, forKey: KeychainKeyConstants.emailKeyForKeychain)
// More properties...
以下是isValid()
的{{1}}方法:
CurrentUser
这种逻辑主要起作用,但在某些情况下却没有。即使我已经登录,有时令人惊讶地被重定向到登录页面(if self.Id == nil || self.email.isEmpty /* other properties... */ { return false }
return true
)。一旦我在调试应用程序时遇到了这个问题,问题是有些值没有被提取(我没有机会看到哪些值)。我无法重现错误,我看不出是什么导致了这个问题。
我使用redirectToWelcome()
访问Keychain,在这里:KeychainWrapper
有人对此有任何想法吗?什么可能导致这个问题?