0

我用核心数据中的数据加载了一个表格视图。它加载了文本。每个单元格上都有一个 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 总是显示正确的数据,这意味着它显示图像正确可见或隐藏,只是当我测试它时,它并不总是工作。

谢谢您的帮助!

4

2 回答 2

2

您创建了一个@property名为cell. 那是行不通的。

您应该只使用一个UITableViewCell变量或一个与您的自定义单元格:

CustomCell *cell = [tableView dequeue...];

此外,您对字符串的处理不是非常有效的内存。改用stringWithFormat

cell.mainLabel.text = [NSString stringWithFormat:@"%@ %@",
       handguns.brands, handguns.model]; 

此外,检查视图是否隐藏以通知您的应用程序逻辑是非常糟糕的做法。相反,您应该有一个健壮的数据模型并改为查询数据模型。在您的情况下,您应该查询适当的handguns对象是否有图像。

于 2013-03-24T20:57:33.513 回答
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”或类似的东西?如果您仍然遇到问题,那么您的代码将在这里更简单且易于解释。如果您不再遇到问题,您可以一次添加一个自定义内容,直到找到破坏内容的修改。

于 2013-03-24T21:06:46.703 回答