2015-12-22 152 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