用户数据未显示在标签中

时间:2016-12-04 17:19:40

标签: ios swift

我正在尝试在屏幕上显示用户数据。但我总是得到一个空值。我不知道为什么。

var profileData = Profile(usrObj: [String:String]())

@IBOutlet weak var userName: UILabel!

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)

    self.userName.text = profileData.FirstName
    print(profileData.FirstName)
}

我的print语句和我的标签值为空。如果我犯了任何错误,请帮助我。

我的模特课程:

class Profile {
    var FirstName: String

    init(usrObj : [String: AnyObject]) {
        self.FirstName = (usrObj["FirstName"] ?? "") as! String
    }

    var ProfileObject: [String:AnyObject] {
        return ["FirstName" : self.FirstName]
    }

2 个答案:

答案 0 :(得分:1)

LoginViewController中保存NSUserDefaults中的数据

@IBAction func loginWithUserNamePassword(){
     KRProgressHUD.show(progressHUDStyle: .White, message: "Loading...")
    loginWithMailAndPassword((username.text?.trimWhiteSpace)!, password: (password.text?.trimWhiteSpace)!) { (user, error) in
     if error != nil{
           KRProgressHUD.dismiss()
           SCLAlertView().showError("Login Error", subTitle: error!.localizedDescription)
      }
      else {
          if user!.emailVerified
          {
                currentUser = user

                fireBaseRef.child("Users").child(currentUser!.uid).child("UserProfile").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
                     if let data: [String : AnyObject] = snapshot.value as? [String : AnyObject] {
                           let userDefaults = NSUserDefaults.standardUserDefaults()
                            userDefaults.setObject(data, forKey: "userdata")
                            userDefaults.synchronize()
                            enableSync()
                            self.navigateToNextScreen()
                        }
                        else{

                        }
                    })
            }
            else
            {
                SCLAlertView().showError("Login Error", subTitle: "This email is has not been verified yet")
            }
        }
      }
  }

并在UserStaticDataViewController

中使用该数据
override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(true)
         self.profileDetailsExists = true

        let userdata : NSDictionary = NSUserDefaults.standardUserDefaults().valueForKey("userdata") as! NSDictionary

        print(userdata["City"] as? String)
         self.userName.text = userdata["FirstName"] as? String
        self.userCity!.text = userdata["City"] as? String
        self.userCountry!.text = userdata.valueForKey("Country") as? String
        self.userState.text = userdata.valueForKey("State") as? String
        self.userMobileNo.text = userdata.valueForKey("Mobile") as? String

        self.userGmail.text = userdata.valueForKey("Email") as? String
        self.userDob.text = userdata.valueForKey("DateOfBirth") as? String


    }

<强>输出:

Check

请批准我的回答并投票。 快乐的编码。

答案 1 :(得分:0)

由于print语句为空,这意味着您将传递给以下等式的userObject

var profileData = Profile(usrObj: [String:String]())

可能没有键#34; firstName&#34;的字符串值。

您可以尝试通过更改代码来验证这一点

self.FirstName = (usrObj["FirstName"] ?? "") as! String

self.FirstName = (usrObj["FirstName"] ?? "Hello world") as! String

并查看&#34; Hello world&#34;在控制台中打印出来。

如果是,那么你只需要确保&#34;用户&#34;传递给Profile类的init函数的对象应该是一个字典,其中存储了一个值&#34; FirstName&#34;