2016-11-01 58 views
0

!我一直在这个问题上停留了2天。这是我的场景。从完成块传递数据到视图控制器swift 3

用户单击登录按钮,如果电子邮件地址和密码存储在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) 
    }) 

这里是我的目的地视图 - 控制提前

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 

    } 
} 

谢谢!

+2

尝试在'func prepare(for segue:UIStoryboardSegue,sender:Any?)'中传递数据''。 – triandicAnt

+0

另请注意:您不应该在'UserDefaults'中存储敏感用户数据,如密码。使用钥匙串。 –

+0

@MattSeaman谢谢。我去做。 –

回答

1

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

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

+0

我upvoted这个,因为这是正确的我需要做什么。谢谢! –

相关问题