【问题标题】:Using Parse SDK with swift , PFUser.currentUser().fetch() not working将 Parse SDK 与 swift 一起使用,PFUser.currentUser().fetch() 不起作用
【发布时间】:2015-12-19 01:23:15
【问题描述】:

用户登录后,如果他们后来决定要更改用户名,他们可以这样做。当我保存记录时,我发现用户名已经存在并且电子邮件已经存在的解析错误。

我遇到的问题是,如果用户决定在应用程序将“错误用户名”保留在缓存中并在整个应用程序中显示之后不更改他们的信息。

我已尝试调用 PFUser.currentUser().fetch(),如下所示,从数据库中的内容刷新它,但无济于事。

唯一有效的方法是退出并重新登录以使其恢复到数据库中的内容。

有什么想法吗?

这是我的代码来捕获用户名错误并尝试刷新 PFUser

func saveUser() {

        let username = nameField.text
        let firstname = firstNameField.text! as String
        let lastname = lastNameField.text! as String
        let profilemsg = profileMessage.text! as String
        let email = emailField.text! as String

        if username!.characters.count > 0 {
            let user = PFUser.currentUser()
            if let user = user {
                user["username"] = username
                user["first"] = firstname
                user["last"] = lastname
                user["greeting"] = profilemsg
                user["email"] = email

            }
            user!.saveInBackgroundWithBlock {(success: Bool, error: NSError?) -> Void in
                if (success) {
                    ProgressHUD.showSuccess("Saved")
                } else {
                    let errorCode = error!.code

                    switch errorCode {

                    case 202:
                        ProgressHUD.showError("Username " + username! + " already taken")
                        self.nameField.text = nil
                        do
                        {
                            try PFUser.currentUser()!.fetch()
                            print("User refreshed")
                        }
                        catch{

                        }
                        break

                    case 203:
                        ProgressHUD.showError("E-mail " + email + " already taken")
                        self.emailField.text = nil
                        do
                        {
                            try PFUser.currentUser()!.fetch()
                            print("User refreshed")
                        }
                        catch{

                        }
                        break
                    default:
                        ProgressHUD.showError("Network Error")
                        break
                    }
                }
            }
        } else {
            ProgressHUD.showError("Userame field must not be empty")
        }
    }

【问题讨论】:

    标签: swift parse-platform


    【解决方案1】:

    无需创建新的用户实例来保存当前用户。

    只需对 currentUser 进行如下更改:

    PFUser.currentUser()!["username"] = username
    ...
    

    然后保存:

    PFUser.currentUser()!.saveInBackgroundWithBlock {(...)}
    

    【讨论】:

    • 不幸的是,这并没有什么不同。我似乎可以让我的 PFUser.currentUser() 从数据库刷新的唯一方法是注销并重新登录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多