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つの画像を表示)が正常に機能します。XMLからデータを更新すると問題が発生します(XMLParserを使用しています-うまく機能します)。プレイヤー名は更新されますが、画像が消えます。他のテーブルビューでは、カスタムセルにプレーヤーのリストがありますが、画像は1つだけで、正常に機能します。

スコアテーブルビュークラスのコードは次のとおりです。

- (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

まず、セルを再利用する場合は、cellForRowAtIndexPathで2つのケースを考慮する必要があります。

  1. dequeueReusableCellWithIdentifierセルを返す
  2. dequeueReusableCellWithIdentifiernilを返します。この場合、新しいセルを割り当てる必要があります。

このifブロックから(つまり、セルが再利用されているか、新しいセルがある場合)、各要素の値を設定して、たとえばラベルや画像を作成します。コードの場合、すべてのコードはdequeueReusableCellWithIdentifierコード行の下にあります。

この他のstackoverflowスレッドに書かれていることに従ってください:[質問] initWithFrame:reuseIdentifier: if(cell == nil)コードブロックがある場所で非推奨になりました...

その後も問題が解決しない場合は、もう一度投稿してください:)

于 2012-07-25T08:01:50.657 に答える
0

次回は、最初に自分のXMLファイルをチェックします。1つのファイルに白い文字が含まれていて、それが問題でした。

于 2012-07-31T09:52:51.757 に答える