在我的UITableView中实现Like / Different函数时遇到问题。我正在使用Parse.com数据库,到目前为止,喜欢和不同的功能实际上工作,但如果我向下滚动一点,UITableView显示错误的信息。
使用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 :(得分:0)
每次tableView的内容发生变化时(每次滚动时都会)运行的cellForRowAtIndexPath中不应出现该代码。
相反,在开始时运行该代码的次数较少,例如在视图出现时以及用户请求更新时。完成块应该将返回的对象放在NSArray属性中,并将reloadData放在表上。
表委托方法应该只引用这些对象的当前状态(不要试图改变它们的状态)。 cellForRowAtIndexPath应该小心设置“它喜欢”条件两边的单元格状态(我认为你的代码就是这样),所以重用的单元格在所有情况下都有正确的状态。