我正在使用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,我认为这里需要什么;一个用于检查当前数据库中是否存在该电子邮件,另一个用于更新该行。
答案 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
}
}