我在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;
}
这可能是这件事吗?
答案 0 :(得分:0)
调用if(object.hasButton)只检查属性hasButton是否存在。它可能确实存在,所以它返回YES!
您想要检查存储在该属性中的值,如下所示:
if (object.hasButton == YES)
答案 1 :(得分:0)
如果您的MyObject
是NSManagedObject
的子类,那么它的hasButton
属性类型为NSNumber *
而不是BOOL
。因为NSNumber
是现有对象 - 非零 - 无论它的值是YES
还是NO
myObject.hasButton
在布尔表达式中求值为TRUE
。请改用[myObject.hasButton booleanValue]
。也可以设置该值使用anObject.hasButton = @(hasButton)
。