0

我是 Objective-C 编程的新手,我正在编写使用 XML 文件作为数据源的应用程序。我有 init 的班级分数:

- (id)initWithPlayer1Name:(NSString *)name1 Player2Name:(NSString *)name2 Player1Url:(NSString *)url1 Player2Url:(NSString *)url2 Player1FrameScore:(NSString *)frame1 Player2FrameScore:(NSString *)frame2 Player1InFrameScore:(NSString *)score1 Player2InFrameScore:(NSString *)score2
{
    if(self = [super init])
    {
        self.name1 = name1;
        self.name2 = name2;
        self.url1 = url1;
        self.url2 = url2;
        self.image1 = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url1]]];
        self.image2 = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url2]]];
        self.frame1 = frame1;
        self.frame2 = frame2;
        self.score1 = score1;
        self.score2 = score2;
    }
    return self;
}

我想在表格视图中显示分数列表。当应用程序启动时,我的自定义单元格中有一些示例数据和表格视图(每行显示 2 个名称和 2 个来自 score 类的图像)工作正常。当我从 XML 更新数据时,问题就开始了(我正在使用 XMLParser - 效果很好)。球员姓名已更新,但图像消失。在其他表格视图中,我有自定义单元格中的玩家列表,但只有一张图片,它工作正常。

这是分数表视图类的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ScoresCell";
    ScoresCell *cell = (ScoresCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = (ScoresCell*) [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    Score *score = [self.scores objectAtIndex:indexPath.row];
    cell.player1Name.text = score.name1;
    cell.player1Image.image = score.image1;
    cell.player2Name.text = score.name2;
    cell.player2Image.image = score.image1;
    return cell;
}

我正在以多种方式对其进行测试,但我还没有找到解决方案。

4

2 回答 2

0

下次我将首先检查我自己的 XML 文件。一个文件中有白色字符,这是一个问题。

于 2012-07-31T09:52:51.757 回答
0

首先,如果您重用单元格,则必须考虑 cellForRowAtIndexPath 中的两种情况:

  1. dequeueReusableCellWithIdentifier返回一个单元格
  2. dequeueReusableCellWithIdentifier返回零。在这种情况下,您必须分配一个新单元格。

在这个 if 块之外(所以当你有一个重复使用的单元格或一个新的单元格时)你将设置每个元素的值,例如标签和图像。对于您的代码,dequeueReusableCellWithIdentifier代码行下的所有代码。

按照这个其他stackoverflow线程中写的内容:[question] initWithFrame:reuseIdentifier:已弃用,您将在其中找到 if(cell == nil) 代码块...

之后,如果您仍然有问题,请再次发布:)

于 2012-07-25T08:01:50.657 回答