2016-12-04 48 views
-2

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

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) 
} 

我的打印声明和我的标签值是空的。请帮我解决我犯的任何错误。

我的模型类:

class Profile { 
    var FirstName: String 

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

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

你在哪里设置'profileData'的'FirstName'属性为非空值? – rmaddy

+0

只有我无法理解如何设置。 ?? – mack

+1

如果您从未将“FirstName”设置为特定的值,那么为什么您会惊讶于您获得了空值? – rmaddy

回答

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

就批准我的答案,让投票。 快乐编码。

+0

这是静态数据屏幕设计花花公子 – mack

+0

然后当我调用一些API获取一些数据。 –

+0

@mack现在检查 –

0

一个事实,即你的打印语句是空的,这意味着userObject传递到下面的公式

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

可能没有一个键“firstName”的字符串值。

您可以尝试更改代码

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

验证这

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

,看“世界,你好”在控制台打印出来。

如果是,那么你必须要确保该“用户”对象,你传递到Profile类的初始化函数应该是一个值的存储的关键“姓”