将数据从完成块传递到视图控制器swift 3

时间:2016-11-01 04:02:46

标签: ios swift xcode swift3

!我在这个问题上被困了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

    }
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您要存储用户对象应用程序端,则应将用户对象存储在NSUserDefaults中。使其符合NSCoding,以便您可以根据需要对User类进行编码/解码。

然后,正如Matthew所述,将您的用户名/密码组合存储在Keychain中,因为它非常敏感,而Keychain旨在以安全的方式保护您的用户凭据。