我几乎已经构建了一个应用程序,但我想在显示 View 或侧 View 的标签中显示当前用户的电子邮件地址。显示 View 是一个 TableView Controller ,登录 View 是一个简单的 View Controller 。
我在登录 View Controller 中使用了以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let target = segue.destinationViewController as? backTableVC {
target.labelname = NSUserDefaults.standardUserDefaults().stringForKey("currentuser")
}
}
以及显示 View Controller 中的以下代码:
var labelname:String? {
didSet {
emailLabel!.text = labelname
}
}
@IBOutlet weak var emailLabel: UILabel! {
didSet {
emailLabel.text = labelname
}
}
override func viewDidLoad() {
super.viewDidLoad()
emailLabel.text = labelname
}
我将断点放在此代码的最后一行,但我得到 nil 作为标签名称的值,并且它也不会更改显示 View 标签的标签中的值。
登录 View Controller 的代码如下
import UIKit
登录 View Controller 类:UIViewController、UITextFieldDelegate {
@IBOutlet weak var userPasswordTextField: UITextField!
@IBOutlet weak var userEmailTextField: UITextField!
var currentuseremail:String?
override func viewDidLoad() {
super.viewDidLoad()
self.userEmailTextField.delegate = self
self.userPasswordTextField.delegate = self
// Do any additional setup after loading the view.
}
func textFieldShouldReturn(userText: UITextField) -> Bool {
userText.resignFirstResponder()
return true;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
var userEmail:String?
var userPassword:String?
@IBAction func loginButton(sender: AnyObject) {
if (userEmailTextField.text! != "")
{
userEmail = userEmailTextField.text}
else {
alert("Please Enter Your email")
}
if (userPasswordTextField != ""){
userPassword = userPasswordTextField.text}
else {
alert("Please Enter Password")
}
let userEmailStored = NSUserDefaults.standardUserDefaults().stringForKey("userEmail")
let userPasswordStored = NSUserDefaults.standardUserDefaults().stringForKey("userPassword")
if(userEmailStored == userEmail) {
if(userPasswordStored == userPassword) {
// Login is Successfull
currentuseremail = userEmail
NSUserDefaults.standardUserDefaults().setObject(currentuseremail, forKey: "currentuser")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIN")
NSUserDefaults.standardUserDefaults().synchronize()
self.dismissViewControllerAnimated(true, completion: nil)
}
}
else {
let myAlert = UIAlertController(title: "Alert", message: "Email or Password doesn't match", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
myAlert.addAction(okAction)
self.presentViewController(myAlert, animated: true, completion: nil)
}
}
func alert(message:String) {
let myalert = UIAlertController(title: "Alert", message: message, preferredStyle: .Alert)
let action = UIAlertAction(title: "OK", style: .Default, handler: nil)
myalert.addAction(action)
self.presentViewController(myalert, animated: true, completion: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let target = segue.destinationViewController as? backTableVC {
target.labelname = NSUserDefaults.standardUserDefaults().stringForKey("currentuser")
}
}
最佳答案
好吧,userEmailStored 看起来并不是您想象的那样。
所以尝试打印出 userEmailStored
let userEmailStored = NSUserDefaults.standardUserDefaults().stringForKey("userEmail")
print(userEmailStored)
然后打印出用户Email
print(userEmail)
据我所知,userEmailStored 将始终为 nil,因为没有 NSUserDefaults.standardUserDefaults().setString("userEmail")
或任何确切的方法。
我的意思是,在您可以访问使用字符串“userEmail”保存的值之前,您必须将某些内容保存到“userEmail”。我没有看到这种情况发生,因此无论何时您访问 NSUserDefaults.standardUserDefaults().stringForKey("userEmail")
,它都会返回“”或 nil
关于ios - 从 loginviewcontroller 获取用户邮箱并显示在 revealview 的标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031985/