2015-12-22 148 views
1

我添加了一个类似类的喜欢系统,每当用户喜欢一个帖子,它会根据他们的用户添加到一个数组。每当按钮被点击时,即使用户指针已经存在,也会创建一个新条目,我该如何避免这种情况?如何避免重复输入?

enter image description here

func loved(sender: UIButton){ 
    let query = PFQuery(className: "Like") 
    var object = PFObject(className: "Like") 
    query.whereKey("user", equalTo: PFUser.currentUser()!) 

    query.findObjectsInBackgroundWithBlock { (likes: [AnyObject]?, error: NSError?) -> Void in 
     if(likes?.count > 0){ 
      object.addUniqueObject(self.playertitle.text!, forKey: "LikedSongsTitle") 
      object.addUniqueObject(self.playerartist.text!, forKey: "LikedSongsArtist") 
     } 
     object.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 

      if(error != nil){ 
       print(error) 
      }else{ 

       print("saved") 
      } 
     }) 
    } 


} 

回答

1

不是创建一个新"Like"对象并将其保存为你的代码所示,你需要先查询该表以确定是否已存在该用户的行。如果返回结果,则可以在该现有对象上调用addUniqueObject并保存。否则,你可以像你已经完成的那样创建一个新的对象。

你的查询可能是这个样子:

let query = PFQuery(className: "Like") 
query.whereKey("user", equalTo: PFUser.currentUser()!) 
query.findObjectsInBackgroundWithBlock { (likes: [PFObject]?, error: NSError?) -> Void in 
    //if likes.count > 0 you already have a like - just update it and save 
    //otherwise create a new Like object and save it 
} 

你不妨重温这是如何工作虽然。歌曲标题和艺术家阵列似乎不是一个很好的方式来完成你在这里后的东西 - 尤其是如果你添加更多的信息,如专辑或年份等。指向一个宋类的指标会更合适。

+0

我更新了我的代码,它仍然做同样的事情,我知道错误,我只是不知道如何解决它。如何将特定用户的对象添加到数组中。这就是我所缺少的。 – stackerleet

+0

@stackerleet无论查询结果如何,您仍然在创建一个新对象并保存它。你不应该在'likes.count> 0'的情况下创建一个新的对象,而是在'likes'中抓住第一个'like',更新它,然后保存'like'。如果'likes.count == 0'只创建一个新对象。 – Joey

+0

那么,如果我想添加一个字符串的数组,它会怎么样?导致像没有addUniqueObject方法。 – stackerleet