2015-06-24 1 views
0

Я работаю над проектом iOS Swift с Parse. Мне нужно разрешить пользователям обновлять электронную почту, но она должна быть уникальной. В настоящее время мой код выглядит следующим образом:iOS swift parse + как проверить, существует ли электронная почта в базе данных

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, которые я думаю, что здесь требуется; Один, чтобы проверить, существует ли это письмо в текущей базе данных, и одно для обновления строки.

+0

Что произойдет, когда вы запустите этот код? – Steve

+0

Кроме того, тег должен быть «parse.com», а не разбор, поскольку это две совершенно несвязанные вещи. – pbush25

ответ

3

Parse автоматически определяет это, если вы попытаетесь установить поле электронной почты PFUser. Например, при подписке пользователя на ваше приложение 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 
     } 
} 
+0

Эй, спасибо, ты прав. Я не обязан писать отдельный код, чтобы проверить, существует ли почта. Парс позаботился об этом. (Y), – Guru

Смежные вопросы