我在 nib 文件中创建了一个 tableview 单元格并向其添加了一个按钮,并为名为 actionButton 的按钮创建了一个插座。现在,根据某些条件,我希望隐藏或取消隐藏按钮。我使用了下面的代码,所以当模型,object.hasButton 属性为 YES 时,我取消隐藏按钮并显示其他。这段代码对我来说看起来很简单,我认为不应该存在重用问题,因为它具有非此即彼条件,所以它应该隐藏假布尔值并取消隐藏真布尔条件。但是,所有单元格,无论它们的值是什么,都会显示按钮。有人可以帮我吗,我一直在尝试调试这个,但我似乎没有找出问题所在。
- (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 布尔值,现在似乎没问题。
@synchronzied(myObject){
myButton.hasButton = hasButton;
}
莫非是这个东西?