2016-03-02 122 views
-1

在我的应用程序中,用户可以添加婴儿名称。我想确保这个宝贝之前没有添加过,所以我可以添加他。如果他在那里,会出现一条错误消息,告诉他如此。 这里的问题,我不能检查这个婴儿是否被添加。用于检查的代码从不执行。我不知道为什么。 我试图在很多方面找出问题所在。但是,当检查代码被忽略时,警报消息会以黑屏显示,并以任何方式添加宝宝!检查此对象是否存在

这是我的代码,这段代码是否保存宝贝是否加入。

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 
      } 
     } 
    } 
}) 

注:我刚才重组你的代码,它仍然是需要的可读性的变化使其在生产应用中可用。

还有你描述的黑点的问题,这可能是因为你在后台线程上做UI代码而发生的。 UI更新应该在主线程上。

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

同样的问题!此代码不工作,并以任何方式添加宝宝!如果object [“baby_name”]为! String == self.babyName { babyNotFound = false print(“此婴儿已被添加过。”) let myAlert = UIAlertController(标题:“错误”,消息:“此婴儿已添加过。”,preferredStyle: UIAlertControllerStyle.Alert) let okAction = UIAlertAction(title:“OK”,style:UIAlertActionStyle.Default,handler:nil) myAlert.addAction(okAction) self.presentViewController(myAlert,animated:true,completion:nil)return} –

+0

Yaay,它的工作!我尝试了你的建议解决方案和dispatch_async函数。另外,我意识到我忘了在比较中放置self.babyName.text。 –

+0

非常感谢你! –