繁体   English   中英

在调用初始ViewController ViewDidLoad时,CoreData和NSUserDefaults是否始终会加载?

[英]Will CoreData and NSUserDefaults have always loaded by the time the initial ViewController ViewDidLoad is called?

在应用启动时,如果用户已经在设备上拥有凭据,我会尝试自动登录。 在我的测试中,我偶尔会观察到自动登录应该成功的失败。 是否可以在CoreData完全初始化之前调用ViewDidLoad?

要检查自动登录,请检查:

  1. 用户对象存在,存储在CoreData中。 我在用于提取CoreData对象的NSUserDefaults中存储了对该用户的引用。
  2. 验证密钥存在,存储在密码箱中

     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 } 

原来,此问题是由较旧版本的Lockbox(1.4.x)引起的。 升级到v3可解决此问题。

感谢您的所有回复。

每当您初始化核心数据时,都会对其进行初始化。 绝对没有魔术,初始化由您的代码完成。 如果您使用的是Xcode项目模板中的代码,则这在您的应用程序委托类中发生,并且在您第一次访问托管对象上下文时自动发生。 如果您使用自己的代码,那么很明显,只要您的代码运行,它就会发生。

NSUserDefaults不需要初始化。 如果您的代码正在运行,则可以使用用户默认值。 您不需要做任何准备就可以了,它就在您身边。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM