在应用启动时,如果用户已在设备上拥有凭据,我会尝试自动登录该用户。在我的测试中,我偶尔会看到自动登录失败,应该是成功的。是否有可能在CoreData完全初始化之前调用ViewDidLoad?
要检查自动登录,请检查:
auth密钥存在,存储在Lockbox
中override func viewDidLoad() {
super.viewDidLoad()
if self.findUser() != nil && self.getAuthToken() != nil {
self.autoLogIn()
}else{
self.showLogInScreen()
}
}
func findUser() -> User? {
let objectURL = NSUserDefaults.standardUserDefaults().URLForKey("userURI")
if (objectURL == nil) {
Debug().printString("objectURL == nil")
return nil
}
let objectID = self.managedObjectContext?.persistentStoreCoordinator!.managedObjectIDForURIRepresentation(objectURL!)
if objectID == nil {
Debug().printString("objectID == nil")
return nil
}
var currentUser: NSManagedObject?
do {
currentUser = try self.managedObjectContext?.existingObjectWithID(objectID!)
} catch let error1 as NSError {
currentUser = nil
Debug().printString("error1.localizedDescription")
}
return currentUser as? User
}
func getAuthToken() -> String? {
let authToken = Lockbox.stringForKey("authToken")
return authToken
}
答案 0 :(得分:1)
此问题原来是由旧版本的Lockbox(1.4.x)引起的。升级到v3修复了问题。
感谢所有回复。
答案 1 :(得分:0)
每次初始化时都会初始化核心数据。绝对没有魔力,初始化是由你的代码完成的。如果您正在使用Xcode项目模板中的代码,则会在您的app委托类中发生,并且在您第一次访问托管对象上下文时会自动发生。如果您使用自己的代码,那么无论何时代码运行,都会发生这种情况。
NSUserDefaults
不需要初始化。如果您的代码正在运行,则可以使用用户默认值。你不需要做任何事情来做好准备,它就在你面前。