细胞重用,隐藏根据某些条件显示细胞内的按钮

时间:2013-11-10 17:13:31

标签: ios objective-c uitableview

我在nib文件中创建了一个tableview单元格,并为其添加了一个按钮,并为名为actionButton的按钮创建了一个插座。现在,根据某些条件,我希望隐藏或取消隐藏按钮。我使用下面的代码,所以当模型,object.hasButton属性为YES时,我取消隐藏按钮并显示否则。这段代码看起来很简单,我不认为应该有一个重用问题,因为它有/ else条件,所以它应隐藏为false布尔值并取消隐藏真正的布尔条件。但是,所有细胞,无论它们的价值是什么,都会显示按钮。有人可以帮助我,我一直试图调试这个,但我似乎没有弄清楚问题。

- (UITableViewCell*)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  MyObject * object = [[self.tableData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath];

  cell.delegate = self;
  if (cell == nil){
    cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_IDENTIFIER];
    cell.delegate = self;

  }


  cell.tableItem = object;
  UIButton *button = cell.actionButton;

  if(object.hasButton){
    [button setHidden:NO];
  }else{
    [button setHidden:YES];

  }

  return cell;

}

问题似乎是线程问题。我在managedObjectContext performBlock:andWait方法中做了一些操作,像这样,

 [newChildContext performBlockAndWait:^{
  count = [newChildContext countForFetchRequest:req error:NULL];
      if(count > 0)
        hasButton = YES;
      else
        hasButton = NO;
  }];

然后像这样更新模型,

    myObject.hasButton = hasButton;

可能是这个问题,所以我将它包装在@synchronized(myObject)块中以更新hasButton bool,现在似乎没问题了。

  @synchronzied(myObject){
      myButton.hasButton = hasButton;
    }
这可能是这件事吗?

2 个答案:

答案 0 :(得分:0)

调用if(object.hasButton)只检查属性hasButton是否存在。它可能确实存在,所以它返回YES!

您想要检查存储在该属性中的值,如下所示:

if (object.hasButton == YES)

答案 1 :(得分:0)

如果您的MyObjectNSManagedObject的子类,那么它的hasButton属性类型为NSNumber *而不是BOOL。因为NSNumber是现有对象 - 非零 - 无论它的值是YES还是NO myObject.hasButton在布尔表达式中求值为TRUE。请改用[myObject.hasButton booleanValue]。也可以设置该值使用anObject.hasButton = @(hasButton)