2016-03-02 2 views
-1

В моем приложении пользователь может добавлять имена младенцев. Я хочу, чтобы этот ребенок не был добавлен раньше, поэтому я могу добавить его. Если он там, появляется сообщение об ошибке. Проблема здесь, я не могу проверить, добавлен ли этот ребенок или нет. Код для проверки никогда не выполняется. Я не знаю почему. Я пытался выяснить проблему во многих отношениях. Но когда код проверки ecxuted, предупреждающее сообщение появляется с черным экраном и добавляет ребенка любым способом!Проверьте, существует ли этот объект до

Это мой код. Этот код спасает ребенка любым способом, независимо от того, добавлен он или нет.

let addBaby = PFObject(className: "Baby") 

    let CheckBaby = PFQuery(className: "Baby") 
    CheckBaby.whereKey("user1", equalTo: ParentID!) 
    CheckBaby.whereKey("user2", equalTo: PFUser.currentUser()!) 
    CheckBaby.findObjectsInBackgroundWithBlock({ (object:[PFObject]?, 
     error:NSError?) -> Void in 

     for object in object! { 
      if object["baby_name"] as! String == self.babyName { 
       print("This baby has been added before.") 
       let myAlert = UIAlertController(title:"Error", message:"This baby has been added before.", preferredStyle:UIAlertControllerStyle.Alert) 
       let okAction = UIAlertAction (title: "OK", style: UIAlertActionStyle.Default, handler: nil) 
       myAlert.addAction(okAction) 
       self.presentViewController(myAlert, animated: true, completion: nil) 
    return} 
      else{ 
      } 
     }// end for 
    }) 

    addBaby.setObject(self.ParentID!, forKey: "user1") 
    addBaby.setObject(self.babyName.text!, forKey: "baby_name") 
    addBaby.setObject(self.parentName.text!, forKey: "parent_fname") 
    addBaby.setObject(self.babyClass.text!, forKey: "class_name") 
    addBaby.setObject(PFUser.currentUser()!, forKey: "user2") 


    addBaby.saveInBackgroundWithBlock { (saved:Bool, error:NSError?) -> Void in 

     if saved { 
      self.navigationController?.popViewControllerAnimated(true) 
     } else { 
      error!.localizedDescription 
     } 
    } 

Благодарим за помощь!

ответ

0

Ваш код добавляет ребенка, независимо от результатов поиска. Ваш код в основном говорит, что это:

Create add baby 
Find a baby like this 
    If there is one like this, display alert 
Setup baby to be added 
Add the baby 
    If it works, popview 

Что вы хотите:

Find a baby like this 
    If there is one, display alert 
    If there isn't one 
     Create baby to add 
     Setup baby to be added 
     Add the baby 
      If it works, pop view 

Что-то вроде:

let CheckBaby = PFQuery(className: "Baby") 
CheckBaby.whereKey("user1", equalTo: ParentID!) 
CheckBaby.whereKey("user2", equalTo: PFUser.currentUser()!) 
CheckBaby.findObjectsInBackgroundWithBlock({ (object:[PFObject]?, 
    error:NSError?) -> Void in 

    var babyNotFound = true 

    for object in object! { 
     if object["baby_name"] as! String == self.babyName { 

      babyNotFound = false 

      print("This baby has been added before.") 
      let myAlert = UIAlertController(title:"Error", message:"This baby has been added before.", preferredStyle:UIAlertControllerStyle.Alert) 
      let okAction = UIAlertAction (title: "OK", style: UIAlertActionStyle.Default, handler: nil) 
      myAlert.addAction(okAction) 
      self.presentViewController(myAlert, animated: true, completion: nil) 
      return 
     } 
    } 

    if babyNotFound { 
     let addBaby = PFObject(className: "Baby") 

     addBaby.setObject(self.ParentID!, forKey: "user1") 
     addBaby.setObject(self.babyName.text!, forKey: "baby_name") 
     addBaby.setObject(self.parentName.text!, forKey: "parent_fname") 
     addBaby.setObject(self.babyClass.text!, forKey: "class_name") 
     addBaby.setObject(PFUser.currentUser()!, forKey: "user2") 


     addBaby.saveInBackgroundWithBlock { (saved:Bool, error:NSError?) -> Void in 

      if saved { 
       self.navigationController?.popViewControllerAnimated(true) 
      } else { 
       error!.localizedDescription 
      } 
     } 
    } 
}) 

Примечание: Я только реорганизована свой код, он все еще нуждается в читаемость, чтобы сделать ее пригодной для использования в производственном приложении.

Существует также проблема черной точки, которую вы описали, это, вероятно, происходит потому, что вы делаете код пользовательского интерфейса в фоновом потоке. Обновления пользовательского интерфейса должны быть в основном потоке.

dispatch_async(dispatch_get_main_queue()) { 
    () -> Void in 
    self.presentViewController(myAlert, animated: true, completion: nil) 
} 
+0

Такая же проблема !! этот код не работает и добавил ребенка в любом случае! если объект ["baby_name"] как! Строка == self.babyName { babyNotFound = false print («Этот ребенок был добавлен раньше.») let myAlert = UIAlertController (название: «Ошибка», сообщение: «Этот ребенок добавлен раньше»., PreferredStyle: UIAlertControllerStyle.Alert) пусть okAction = UIAlertAction (название: "OK", стиль: UIAlertActionStyle.Default, обработчик: ноль) myAlert.addAction (okAction) self.presentViewController (myAlert, анимированные: правда, завершение: ноль) возвращение} –

+0

Yaay, это сработало !! Я попробовал ваше предлагаемое решение и функцию dispatch_async. Кроме того, я понял, что забыл поставить self_babyName.text в сравнении. –

+0

Спасибо вам большое! –