ios - 当新用户使用 Swift 和 Parse 登录时,数据不会更新到当前用户

标签 ios swift parse-platform

我正在开发一个使用电话号码和短信验证登录的应用程序。除了一个小问题外,一切都很好。如果我注销一个用户,然后用另一个用户登录,则会加载以前的用户数据,但是会创建一个新用户,但会显示以前的用户数据。我必须注销并再次登录新用户才能加载他们的数据。有人看到发生了什么事吗?

登录码:

class LoginViewController: UIViewController {

func displayAlert(title: String, message: String) {
    var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in
    }))
    self.presentViewController(alert, animated: true, completion: nil)
}


@IBOutlet weak var instructionLabel: UILabel!
@IBOutlet weak var phoneNumberTextField: UITextField!
@IBOutlet weak var sendCodeButton: UIButton!

var phoneNumber: String = ""



override func viewDidLoad() {
    super.viewDidLoad()

    first()
    self.editing = true
}

func first() {
    phoneNumber = ""
    phoneNumberTextField.placeholder = "555-555-5555"
    instructionLabel.text = "Enter your phone number to login or sign up"
    sendCodeButton.enabled = true
}

func second() {

    phoneNumber = phoneNumberTextField.text!
    phoneNumberTextField.text = ""
    phoneNumberTextField.placeholder = "1234"
    instructionLabel.text = "Enter your 4 digit security code"
    sendCodeButton.enabled = true
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    phoneNumberTextField.becomeFirstResponder()
}

@IBAction func didTapSendCodeButton() {

    let preferredLanguage = NSBundle.mainBundle().preferredLocalizations[0]

    let textFieldText = phoneNumberTextField.text ?? ""

    if phoneNumber == "" {
        if (preferredLanguage == "en" && textFieldText.characters.count != 10) {
            displayAlert("Phone Login", message: NSLocalizedString("warningphone", comment: "You must enter a 10 digit US phone number including area code"))
            return first()
        }

        self.editing = false
        let params = ["phoneNumber" : textFieldText, "language" : preferredLanguage]
        PFCloud.callFunctionInBackground("sendCode", withParameters: params) { response, error in
            self.editing = true
            if let error = error {
                var description = error.description
                if description.characters.count == 0 {
                    description = NSLocalizedString("warningGeneral", comment: "Something went Wrong. Please try again")
                } else if let message = error.userInfo["error"] as? String {
                    description = message
                }
                self.displayAlert("Login Error", message: description)
                return self.first()
            }
            return self.second()
        }
    } else {
        if textFieldText.characters.count == 4, let code = Int(textFieldText) {
            return doLogin(phoneNumber, code: code)
        }

        displayAlert("Code Entry", message: NSLocalizedString("warningCodeLength", comment: "You must enter the 4 digit code texted to your number"))
    }
}

func doLogin(phoneNumber: String, code: Int) {

    self.editing = false
    let params = ["phoneNumber": phoneNumber, "codeEntry": code] as [NSObject:AnyObject]
    PFCloud.callFunctionInBackground("logIn", withParameters: params) { response, error in
        if let description = error?.description {
            self.editing = true
            return self.displayAlert("Login Error", message: description)
        }
        if let token = response as? String {
            PFUser.becomeInBackground(token) { user, error in
                if let _ = error{
                    self.displayAlert("Login Error", message: NSLocalizedString("warningGeneral", comment: "Something happened while logging in. Please try again"))
                    self.editing = true
                    return self.first()
                }

                return self.dismissViewControllerAnimated(true, completion: nil)
            }
        } else {
            self.editing = true
            self.displayAlert("Login Error", message: NSLocalizedString("warningGeneral", comment: "Something went wrong. Please try again"))
            return self.first()
        }
    }
}

override func setEditing(editing: Bool, animated: Bool) {
    sendCodeButton.enabled = editing
    phoneNumberTextField.enabled = editing
    if editing {
        phoneNumberTextField.becomeFirstResponder()
    }
}
}

extension LoginViewController : UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
    self.didTapSendCodeButton()

    return true

}
}

最佳答案

发现问题我必须更新 viewWillAppear 中的标签

关于ios - 当新用户使用 Swift 和 Parse 登录时,数据不会更新到当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146125/

相关文章:

ios - Voip 应用程序 IOS 出现错误 Error Domain=NSPOSIXErrorDomain Code=61 "The operation couldn’ 无法完成。连接被拒绝

ios - ld : library not found for -lreact-native-fetch-blob with pods?

iphone - 导航问题

java - 无法使用解析检索查询

ios - 登录Parse后加载账户信息

ios - 更新 UITabBarItem 中所选图像的前景色

ios - Swift 3/如何重用扩展

ios - Int 类型的表达式模式不能匹配 (int) -> Int 类型的值

swift - 如何使用调用站点上下文来报告/传播 Firestore 错误至 recordError

ios - 解析 - 设置设备 token