UITableView单元格提供错误的信息

时间:2013-03-24 20:41:12

标签: iphone ios uitableview core-data

我加载了一个包含核心数据数据的tableview。 它加载了文本。 每个单元格都有一个uiimageview。当表调用cellForRow:时,它会将图像设置为隐藏或不隐藏(取决于它应该是什么核心数据。)

代码:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath{

static NSString * identifier = @"identifier";

self.cell = [tableView dequeueReusableCellWithIdentifier:identifier];

HuntingRifleGuns *handguns = [self.tableArray objectAtIndex:indexPath.row];

NSString *brandModel = [[handguns.brand stringByAppendingString:@" "] stringByAppendingString:handguns.model];

self.cell.mainLabel.text = brandModel;

self.cell.nicknameLabel.text = handguns.nickname;
//Right below me, is where is set the imageView to hidden, or not hidden. 
self.cell.alert.hidden = handguns.showBadge.boolValue;

self.cell.alert.image = [UIImage imageNamed:@"tvicon.png"];

return self.cell;
}

我的问题是:如果我在桌面视图上有1个单元格,它可以完美地工作,但是如果我在桌面上有更多的1个单元格,它就会起作用。

我想检查细胞图像是否被删除时是否隐藏:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {        

    if (!self.cell.alert.isHidden) {


        NSLog(@"showing");

    }
 else{

NSLog(@"Not showing");
}
     .........

但是当它测试时,它并不总是做正确的事情。它只是随机打印出showingnot showing。而且我知道它是否应该显示,因为它会在单元格上显示图像。这可能是什么原因? 只是侧面注释,用户可以将图像设置为隐藏或不隐藏在不同视图中,但是tableview始终显示正确的数据,这意味着它显示图像可见或正确隐藏,就在我测试时,它并不总是工作。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您已创建名为@property的{​​{1}}。那不行。

您应该使用cell变量或自定义单元格中的变量:

UITableViewCell

此外,您对字符串的处理效率不高。请改用CustomCell *cell = [tableView dequeue...];

stringWithFormat

另外,检查视图是否隐藏以通知您的应用程序逻辑是非常糟糕的做法。相反,您应该拥有一个强大的数据模型并查询数据模型。在您的情况下,如果对象有图像,则应查询相应的cell.mainLabel.text = [NSString stringWithFormat:@"%@ %@", handguns.brands, handguns.model]; 对象。

答案 1 :(得分:1)

您将出列的单元格分配给self上的属性,这很奇怪。由于-tableView:cellForRowAtIndexPath:以非确定性方式请求单元格,因此几乎肯定不会出现您的想法。您应该将出列的单元格分配给具有局部范围的变量。使用-tableView:commitEditingStyle:forRowAtIndexPath:的参数来检索要处理的单元格。例如:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([[[cell textLabel] text] isEqualToString:@"foo"]) {
      NSLog(@"showing");
    } else{
      NSLog(@"Not showing");
    }
  }
}

此外,在调试此类问题时,将问题简化为仍然会导致问题的最简单的问题通常很有用。如果您使用简单的UITableViewCell并使用默认外观,而不是使用自定义单元格或其他任何内容,则会发生什么情况。而不是隐藏或显示您已添加到单元格的图像视图,您只需将其默认文本更改为“foo”或“bar”或类似的东西?如果您仍然遇到问题,那么您的代码将更加简单易懂。如果你不再遇到这个问题,你可以一次一件地添加自定义的东西,直到找到破坏的东西。