iOS swift解析+如何检查数据库中是否已存在电子邮件

时间:2015-06-24 16:08:12

标签: ios swift parse-platform

我正在使用Parse开发iOS Swift项目。我需要允许用户更新他们的电子邮件,但它应该是唯一的。目前,我的代码如下所示:

var user = PFUser.currentUser()
    var userName = user.username

    var profQuery = PFQuery(className: "User")
    profQuery.whereKey("email", equalTo: fnEditEmail)

    profQuery.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil && objects!.count < 1 {
            if let objects = objects as? [PFObject] {
                for object in objects {
                    println(object.objectId)
                    object.setValue(self.fnEditEmail.text, forKey: "email")
                    object.setValue(self.fnEditAge.text, forKey: "age")
                    object.setValue(self.fnEditGender.text, forKey: "gender")
                    object.setValue(self.fnEditText.text, forKey: "fullname")

                    object.setValue(self.keyWord1.text, forKey: "key1")
                    object.setValue(self.keyWord2.text, forKey: "key2")
                    object.setValue(self.keyWord3.text, forKey: "key3")
                    object.setValue(self.keyWord4.text, forKey: "key4")

                    object.saveInBackgroundWithBlock {
                        (succeeded: Bool!, error: NSError!) -> Void in
                        if error == nil {
                             println "Profile Updated."
                            } else {
                                println "Failed"
                            }
                    }
                }
            } else if error == nil && objects!.count >= 1 {
                println "email already exist."
                } else if error != nil {
                    println "couldn't update, please try again."
                    }
            }
        }

我不认为这是正确的代码而且它也不起作用。有人可以指导我如何适应这个,如果我可以阻止两个PFQuery和findObjectsInBackgroundWithBlock,我认为这里需要什么;一个用于检查当前数据库中是否存在该电子邮件,另一个用于更新该行。

1 个答案:

答案 0 :(得分:3)

如果您尝试设置PFUser的电子邮件字段,

Parse会自动检测到此信息。例如,在将用户签名到您的应用程序时,Parse将返回错误,表明该电子邮件已被使用并且不会允许单播。事实上,它甚至可以为您提供警报,我很确定。

如果用户试图更新他们的电子邮件,在应用程序的任何其他部分中,Parse将以相同的方式工作,尽管没有您需要处理的错误演示。

因此,您不必进行任何疑问或任何问题。您只需尝试更新PFUser对象的电子邮件字段并保存,如果此类电子邮件地址已存在,Parse将为您返回错误。

底线是Parse永远不会允许任何PFUser的非唯一电子邮件地址,因此您不必编写代码来担心这一点。如果您想要的话,只需担心电子邮件地址验证,然后担心如果Parse返回错误则会发出警报。

var user = PFUser.currentUser()
user.setValue(newEmail, forKey: "Email")
user.saveInBackgroundWithBlock {
  (succeeded: Bool!, error: NSError!) -> Void in
       if error == nil {
           println "Profile Updated."
       } else {
           println "Failed"
           //present alert to user to let them know that it failed
           //ask them to try a new email address
       }
 }