!我在这个问题上被困了2天。这是我的情景。
用户单击登录按钮,如果电子邮件地址和密码存储在UserDefaults
中,则应用程序会静默登录用户,首先在从服务器检索用户数据时显示UIAlertController
。数据返回到应用程序后,完成处理程序会为结果分配本地属性var User: [String: AnyObject]
。此时我可以print(self.User)
并且数据已正确分配。都好。当我尝试将此数据传递给我通过present
呈现的下一个控制器时,会出现此问题。这是我的代码:
LoginViewController.swift
-----
dismiss(animated:true, completion: {
let tenantViewController = storyboard.instantiateViewController(withIdentifier :"tenantDashboardViewController") as! TenantDashboardViewController
tenantViewController.User = user
print(tenantViewController.User) //Works
self.present(tenantViewController, animated: true)
})
这是我的目标viewcontroller
import Foundation
import SideMenuController
class TenantDashboardViewController: SideMenuController {
var User: [String: AnyObject]?
override func viewDidLoad() {
super.viewDidLoad()
performSegue(withIdentifier: "showTenantDashboardHomeViewController", sender: nil)
performSegue(withIdentifier: "containTenantSideMenu", sender: nil)
print(self.User!) //Always returns nil, crashes app
}
}
提前致谢!
答案 0 :(得分:1)
如果您要存储用户对象应用程序端,则应将用户对象存储在NSUserDefaults
中。使其符合NSCoding
,以便您可以根据需要对User类进行编码/解码。
然后,正如Matthew所述,将您的用户名/密码组合存储在Keychain中,因为它非常敏感,而Keychain旨在以安全的方式保护您的用户凭据。