ios - 使用 swift 查找现有 PFUser

标签 ios swift parse-platform

我使用以下代码来识别 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/

相关文章:

ios - 解析两个键等于一个值的查询

ios - 如何将 iOS 6.1 DocSets 从 Xcode 4 导入到 Xcode 5

ios - 返回nil表示无法返回任何数据是否是错误的做法?

ios - 侧边菜单覆盖特定情况下的后退按钮

swift - NSPersistentDocument 和 File 菜单项

java - OOD - 将数据传递给模型 (MVC)

ios - 错误 : Invalid bitcode version (Producer: '800.0.24.1_0' Reader: '703.0.31_0' ) with XCode 7. 3.1

swift - 无法将类型 'A<T>' 的值转换为预期的参数类型 'A<_>'

swift - xcode TableView Controller 搜索多个数组

Flutter parse-server sdk无法删除对象