从nib加载的UITableViewCell没有更新(缓存?)

时间:2014-04-10 10:01:28

标签: ios core-data nsfetchedresultscontroller magicalrecord

我使用Core Data和MagicalRecord管理,可以启用禁用。有 数据存储中实体上的已启用标志。 还有标题。最后我 使用NSFetchedResultsController在表格视图中显示项目。表视图有两个 部分:第一部分用于已启用的项目,第二部分用于已禁用的项目。所有项目 默认情况下启用 禁用项的单元格具有不同的背景颜色(黄色)。 为了使事情复杂化,单元格从nib文件加载,如下所示:

  - (void)viewDidLoad
  {
      // ...

      self.items = [Item fetchAllGroupedBy:@"enabled"
                             withPredicate:nil
                                  sortedBy:@"enabled,createdOn"
                                 ascending:NO
                                  delegate:self];
      // ...

      [self.tableView registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil]
           forCellReuseIdentifier:@"CustomCellReuseIdentifier"];

      // ...
  }

  // ...

  - (CustomTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
      static NSString     *reuseIdentifier = @"CustomCellReuseIdentifier";
      CustomTableViewCell *cell            =
          (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier
                                                                 forIndexPath:indexPath];

      [self configureCell:cell forRowAtIndexPath:indexPath];

      return cell;
  }

  - (void)configureCell:(CustomTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  {
      Item *item = [self.items objectAtIndexPath:indexPath];

      cell.titleLabel.text = item.title;

      if (!item.enabled.boolValue) {
          cell.backgroundColor = [UIColor colorWithRed:0.999 green:0.895 blue:0.452 alpha:1.000];
      }
  }

  // ...

现在,当我禁用一个项目删除它,然后创建一个新的项目 标题相同, 新的项目的单元格具有黄色背景,即使新的项目已启用 。如果我检查项目 它本身确实是启用,所以它只是保持黄色的单元格。

有人知道问题可能是什么吗?

2 个答案:

答案 0 :(得分:1)

这是一个常见的错误。

您正在使可重复使用的单元格出列。它将处于添加到队列(或缓存,如果您愿意)的任何状态。

您需要在else方法中添加configureCell:代码块:

- (void)configureCell:(CustomTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    Item *item = [self.items objectAtIndexPath:indexPath];

    cell.titleLabel.text = item.title;

    if (!item.enabled.boolValue) {
        cell.backgroundColor = [UIColor colorWithRed:0.999 green:0.895 blue:0.452 alpha:1.000];
    }
    else
    {
        // Set cell.backgroundColor to the enabled color
    }
}

答案 1 :(得分:0)

您需要设置默认背景颜色。 这是因为在出现单元格后,背景颜色不会自动设置。 所以就这样吧:

cell.backgroundColor = [UIColor whiteColor]; //put here default color of your cell
if (!item.enabled.boolValue) {
          cell.backgroundColor = [UIColor colorWithRed:0.999 green:0.895 blue:0.452 alpha:1.000];
}