2016-10-14 1 views
0

Когда пользователь подписывается, он перенаправляется на другой контроллер просмотра, где им необходимо проверить их номер телефона. Я попытался настроить PFQuery для извлечения кода пользователя из Parse и посмотреть, совпадает ли он с тем, что было написано в текстовом поле проверки, но всегда приводит к тому, что пользователь перенаправляется на главный контроллер представления, правильно ли введен код или неправильно. Я также попытался сделать это с помощью objectForKey (currentUser) и запроса if phoneCode != currentUser, однако результат тот же. То, что я пытаюсь сделать, это проверить, правильно ли введен код, и перенаправить пользователя на другой контроллер представления на основе ответа.Как проверить информацию о пользователе с помощью PFQuery

@IBAction func submitCodeTapped(sender: AnyObject) { 
    let currentUser = PFUser.currentUser()?.objectForKey("phoneVerification") as? NSValue 
    let code = codeTextField.text 
    let query = PFQuery(className: "User") 
    let phoneCode = query.whereKey("phoneVerification", equalTo: code!) 
    query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 
     if error != nil || objects != nil { 
     //if phoneCode != currentUser{ 
      self.displayAlert2("Wrong Code", message: "This is not the code you were sent.") 
     }else{ 
      let myUser:PFUser = PFUser.currentUser()! 
      myUser.setObject(true, forKey: "phoneVerified") 
      myUser.saveInBackgroundWithBlock { (success, error) -> Void in 
       if error == nil{ 
        print("Successfully set the object.") 
        self.displayAlert("Great!", message: "Your phone number has been verified!", error: nil) 
        let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
        appDelegate.buildUserInterface() 
       }else{ 
        //let loginVC = self.storyboard?.instantiateViewControllerWithIdentifier("signInPage") 
        //self.navigationController?.pushViewController(loginVC!, animated: true) 
        print("Erreur") 

       } 
      } 
     } 
    }) 
} 
+0

В вашем первом, если заявлении , error! = nil означает, что есть ошибка, объекты! = nil означает, что запрос успешно нашел объекты (без ошибок). Разве эти два утверждения не противоречат друг другу? –

ответ

0

В своем первом заявлении if вы сообщаете серверу, что если есть ошибки в поиске объектов или запрос нашел некоторые объекты, тогда отобразите предупреждение. Но, учитывая, что пользователь вводит неправильный код, запрос возвращает пустой массив (), обратите внимание, что он не будет возвращать нуль, это пустой массив), но ошибок не будет, поэтому выполняется блок else ,

и с момента «phoneVerification» является число, мы должны тайным на codeTextField.text в NSNumber:

let code = NSNumber(value:Int(codeTextField.text)!) 
let query = PFQuery(className: "_User") 
query.whereKey("phoneVerification", equalTo: code!) 

вы можете изменить свой первый, если заявление:

if ((error != nil && error! as! Bool) || objects?.count == 0) { 
    //handle the error here. 
} 
+0

Спасибо. При применении запроса if statement 'if error || ! objects «Я получаю сообщение об ошибке» Необязательный тип Bool нельзя использовать как логическое, вместо теста «! = nil», и когда я пытаюсь без запроса, я получаю ошибку «Бинарный оператор« == »не может быть применен к операнды типа String? и «AnyObject?» в строке «code == codeOnServer» –

+0

@JM - это ваше значение для ключевого слова «phoneVerification» строка на вашем сервере синтаксического анализа? –

+0

Спасибо. Нет значения для «phoneVerification» - это число. –

0

изменение

let query = PFQuery(className: "User") 
let phoneCode = query.whereKey("phoneVerification", equalTo: code!) 

в

let query = PFQuery(className: "_User") 
query.whereKey("phoneVerification", equalTo: code!) 

Если вы хотите, чтобы принести пользователю с помощью запроса, имя пользовательского класса является _User. Вот почему в вашем коде вы всегда получаете объекты, равные нулю, поэтому обращается к инструкции else.

Кроме того, я предлагаю вам распечатать объекты и посмотреть, что вы получаете.

+0

Спасибо. Я сделал это, но результат все тот же. Я полагаю, что проблема начинается с части «if error! = Nil || objects ...» и далее –

+0

Вы печатали и видели, что получаете в объектах? Способ отладки это попытаться посмотреть, почему ошибка равна нулю, а объекты - нулю, потому что вы получаете результат из выражения else. –