2013-11-21 31 views
0

在我的UITableView中執行Like/Different函數時出現問題。我正在使用Parse.com數據庫,到目前爲止,類似和不同的函數實際上工作,但如果我向下滾動一下,UITableView顯示錯誤的信息。像UITableViewCells中的按鈕

使用NSLog得到我真正喜歡的正確的行。我查詢的是我在數據庫中創建的類,以便與indexPath中的對象進行比較,如果它們與不同的按鈕匹配應該是可見的。問題是,如果我喜歡第一行(索引0),不同按鈕也將顯示在索引5,10,15等。我從屏幕上開始可以看到3,5個單元格。這裏是我的代碼,是的cellForRowAtIndexPath

PFQuery *getLike = [PFQuery queryWithClassName:@"Likes"]; 
    [getLike whereKey:@"user" equalTo:[PFUser currentUser]]; 
    [getLike whereKey:@"post" equalTo:[mainFeed objectAtIndex:indexPath.row]]; 

    [getLike findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){ 
     if(!error){ 
      PFUser* userIClickedOnInTheTableview = [PFUser currentUser]; 
      PFObject *checkObj = [mainFeed objectAtIndex:indexPath.row]; 

      for (PFObject *object in objects) { 
       PFUser* checkUser = [object objectForKey:@"user"]; 
       PFObject *likeObj = [object objectForKey:@"post"]; 
       if([userIClickedOnInTheTableview.objectId isEqualToString:checkUser.objectId] && [checkObj.objectId isEqualToString:likeObj.objectId]){ 
        NSLog(@"You like this row: %d", indexPath.row); 

        MIHFeedCell *thecell = (MIHFeedCell*)[tableView cellForRowAtIndexPath:indexPath]; 
        thecell.likeBtn.hidden = YES; 
        thecell.unlikeBtn.hidden = NO; 

       }else{ 
        MIHFeedCell *thecell = (MIHFeedCell*)[tableView cellForRowAtIndexPath:indexPath]; 
        thecell.likeBtn.hidden = NO; 
        thecell.unlikeBtn.hidden = YES 
        ; 

       } 
      }} 
    }]; 

回答

0

該代碼不應該存在於獲取運行每一次的變化的tableView(所有滾動時的時間)內容的cellForRowAtIndexPath。

相反,在開始時運行該代碼的次數並不經常,例如當視圖出現時以及用戶請求更新時。完成塊應該將返回的對象放在表上的NSArray屬性和reloadData中。

表委託方法應該只引用這些對象的當前狀態(不要試圖改變它們的狀態)。 cellForRowAtIndexPath應該小心地設置「is it liked」條件(我認爲你的代碼這樣做)的兩側的單元格狀態,所以重用單元格在所有情況下都具有正確的狀態。

+0

我不認爲我真的明白你的意思,我沒有把viewDidLoad中的下載方法,而只是嘗試,但我在cellForRowAtIndexPath比較,因爲我需要檢查與數據庫,如果行上的對象存在在那裏。 – Mikzstone

+0

你可以在'viewDidLoad'本身進行比較。 獲取值,比較它們並顯示在'cellForRowAtIndexPath' –