我使用以下代码来识别 PFUser 是否已存在:
let findExistingUserQuery = PFQuery(className: "_User")
findExistingUserQuery.whereKey("email", equalTo: EmailTextField.text!)
findExistingUserQuery.findObjectsInBackgroundWithBlock{ (objects, error) -> Void in
if(error == nil){
print(objects![0])
if(objects!.count > 0){
let existingAlert = UIAlertController(title: "Alert", message: "A user with this email already exists", preferredStyle: .Alert)
existingAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
self.presentViewController(existingAlert, animated: true, completion: nil)
self.Spinner.hidden = true
self.Spinner.stopAnimating()
print("exists")
}else{
print("available")
//temporarily save user info
user.username = self.EmailTextField.text
user.email = self.EmailTextField.text
user["PhoneNumber"] = self.PhoneNumberTextField.text
phone = self.PhoneNumberTextField.text!
//segue to Create Profile Screen
self.performSegueWithIdentifier("ToCreateProfileSegue", sender: nil)
self.Spinner.hidden = true
self.Spinner.stopAnimating()
}
}
}
但是,由于某种原因,即使没有用户,else也永远不会被调用。调用的第一部分起作用,可以识别用户何时已加载到数据库中。 有什么建议吗?
最佳答案
有两件事:一 - 当用户注册时,Parse 会自动为您执行此操作(它检查用户名和/或电子邮件是否与任何其他帐户匹配)。二 - 我实际上也一直在解决这个结果问题。如果查询发出去,error == nil 并且返回了对象,Swift 认为没有问题发生。我相信得到的结果是没有现有用户拥有该电子邮件地址([])。所以我认为你需要检查结果是否 == ([]) 或 == nil。我只是用它来检测返回的结果是否不包含有值(value)的信息。
我注意到的其他一些事情(仅当这将成为一个生产应用程序时才适用)
1) 检查是否objects == nil,然后检查else if error != nil,然后执行else语句。如果 Parse 返回错误,您可以使用 error!.localizedDescription
显示该错误2)performSegue中的发送者应该是Self
,指的是self是你现在所在的 View Controller ,而该 View Controller 是发送者(执行segue的那个)。
3) 确保在用户注册或登录时清理字符以除去任何空格。另外,here是如何检测电子邮件是否确实是电子邮件。
关于ios - 使用 swift 查找现有 PFUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530883/