我正在使用 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,我认为这里需要什么;一个用于检查当前数据库中是否存在该电子邮件,另一个用于更新行。
最佳答案
如果您尝试设置 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
}
}
关于iOS swift parse + 如何检查电子邮件是否已存在于数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031596/