2016-01-06 150 views
0

我想根據他們的個人資料過濾帖子。例如,當我轉到我的個人資料時,我只想看到我的帖子,而不是我數據庫中的所有帖子。我試圖爲此做一個過濾器,但下面的代碼似乎不起作用,我不確定這是爲什麼。這可能是顯而易見的,但我似乎無法指出問題,有什麼想法? 我附上了數據庫的圖片以進一步幫助任何人。Parse.com查詢無法正常工作

代碼運行得很好,它只是不過濾用戶名。

enter image description here

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var user = PFUser.currentUser()?.username! 

    let bucketCellObj = tableView.dequeueReusableCellWithIdentifier("bucket", forIndexPath: indexPath) as! BucketTableViewCell 

    var query = PFQuery(className: "Bucket") 
    query.whereKey("creator", equalTo: user!) 
    query.findObjectsInBackgroundWithBlock { (PFObject, error) -> Void in 
     if error == nil { 
      bucketCellObj.bucketname.numberOfLines = 0 
      bucketCellObj.username.text = self.bucketsArray[indexPath.row]["creator"] as? String 
      bucketCellObj.bucketname.text = self.bucketsArray[indexPath.row]["name"] as? String 
      bucketCellObj.selectionStyle = .None 
     } else { 
      print("ERROR") 
     } 
    } 
    return bucketCellObj 
} 
+0

'user'是什麼? – luk2302

+0

對不起,只是將它添加到查詢變量上面的代碼中。 –

+0

看起來你只是在'creator'列中描述用戶名的字符串,所以你需要使用它作爲'equalTo'的參數而不是整個PFUser對象。只要提取任何設置爲「創建者」的字段即可。你也許應該看看關係,因爲這是鏈接兩個對象之間更標準的方式 –

回答

1

什麼你在這裏做在某些情況下威力工作,但肯定會咬你在某些時候。

你的代碼做什麼:

  • 表演細胞的一些任意數量 - 可能是基於self.bucketsArray.count或在每個小區建立類似
  • 的東西,運行分析查詢
  • 當查詢返回,自定義已經相應顯示單元 - 沒有任何使用請求的查詢響應

T帽子將導致幾個原因問題:

  • 執行太多的要求,每個小區請求一些數據,每一個新的顯示單元再次請求其自己的數據
  • 在單元格中顯示舊的數據,直到新數據被提取,這可能需要幾秒鐘的時間,由於請求的數量
  • 你可能會遇到一個問題,你需要一些數據的單元格,該單元格離開屏幕,獲得重用,然後第一個查詢返回,仍然成立提及它並將因此顯示錯誤的數據

如何解決

請勿請求cellForRowAtIndexPath中的數據。
請求數據一次 in viewDidLoad或類似的。一旦數據得到返回,解析它並啓動tableView.reload()
cellForRowAtIndexPath利用已經檢索的數據,不要執行任何異步任務。