我正在尝试在屏幕上显示用户数据。但我总是得到一个空值。我不知道为什么。
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]
}
答案 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
}
<强>输出:强>
请批准我的回答并投票。 快乐的编码。
答案 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;