2016-04-10 20 views
0

を使用して、既存の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() 
          } 
         } 

        } 

をユーザがいない場合でもしかし、何らかの理由で、それ以外が呼び出されることはありません。呼び出しの最初の部分は機能し、ユーザーがデータベースに既にロードされているときを識別できます。 提案がありますか?

+0

2つのこと:ユーザーがサインアップしたとき(ユーザー名や電子メールが他のアカウントと一致するかどうかをチェックする)、One - Parseが自動的に行います。 2つ - 私は実際にこの結果の問題でもプレイしてきました。クエリが送信され、エラー== nilとオブジェクトが返された場合、Swiftは問題は発生していないと考えます。私は得られる結果は、その電子メールアドレスが([])である既存のユーザーではないと信じています。ですから、結果==([])か== nilかどうかを確認する必要があると思います。私はちょうどそれを検出するために周りに再生される結果は貴重な情報を含んでいません。 –

+0

私は組み込み関数を認識しています。問題は、いくつかのView Controllerでユーザー情報を収集していることです。 –

+0

私は実際に同じことをする!最初のViewControllerで、ユーザーのユーザー名とパスワード(およびパスワードの確認)を収集し、そのデータをParseに送信します。次に、そのユーザーのデータを解析するためにデータを保存するときは、PFUser.currentUser()!。saveInBackgroundを呼び出すと、電子メールが別のアカウントで使用されていないことを確認します。そうでない場合は、成功== trueとなり、作成したばかりのユーザーのアカウントに保存されます。 –

答えて

0
//query users for matching email 
        let findExistingUserQuery = PFUser.query() 
        findExistingUserQuery!.whereKey("email", equalTo: EmailTextField.text!) 
        findExistingUserQuery!.findObjectsInBackgroundWithBlock { 
         (objects: [PFObject]?, error: NSError?) -> Void in 

         if error == nil { 
          // The find succeeded. 
          print("Successfully retrieved \(objects!.count) users.") 
          // Do something with the found objects 
          if (objects!.count > 0) { 
           print("user exists") 

           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() 
          }else{ 
           print("no user found") 
           //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 { 


      // Log details of the failure 
         print("Error: \(error!) \(error!.userInfo)") 
        } 
       } 

このコードは現在動作しています。 findObjectsInBackgrounfWithBlock関数を少し変更しました

0

オブジェクトが見つかりませんし、エラーチェックの代わりにエラーの部分でそのブロックを呼び出す必要がある可能性があります。

ユーザが見つからない場合、コードプリント(オブジェクト![0])は出力を記録しますか?

+0

ユーザが存在しない場合print(objects![0])は何も返しません。つまり、ビューにクエリとしてエラーが発生した場合、データベースにデータが存在しないとしたら? –

+0

そうかもしれません。長い時間パースに取り組んできました。 –

+0

あなたのコードプリント(オブジェクト![0])は、ユーザーが見つからないときに出力を記録しますか? –

0

2つのこと:ユーザーがサインアップしたとき(ユーザー名や電子メールが他のアカウントと一致するかどうかを確認する)、One - Parseはこれを自動的に行います。 2つ - 私は実際にこの結果の問題でもプレイしてきました。クエリが送信され、エラー== nilとオブジェクトが返された場合、Swiftは問題は発生していないと考えます。私は得られる結果は、その電子メールアドレスが([])である既存のユーザーではないと信じています。ですから、結果==([])か== nilかどうかを確認する必要があると思います。私はちょうどそれを検出するために周りに再生される結果は貴重な情報を含んでいません。その後、オブジェクト== nilで、elseステートメントを実行し、その後、エラー!= nilの場合は、他のチェックすると

私が気づいたいくつか他のものは、(これは生産アプリになろうとしている場合にのみ関係)

1)をチェック。 Parseからエラーが返された場合、エラーを表示することができます!.localizedDescription

2)performSegueの送信者は、自分自身と現在のビューコントローラであるという事実を参照してSelfである必要がありますコントローラーは送信者(セグを実行するコントローラー)です。

3)ユーザーがサインアップまたはログインするときに、スペースを取り除くために文字をクリーンアップすることを確認してください。また、hereは、電子メールが実際に電子メールであるかどうかを検出する方法です。

関連する問題