2

Nimbuskit の NINetworkImageView を使用しています。画像のグリッドを表示する単純な UICollectionView があります (NINetworkImageViews)。通常は魅力的に機能しますが、特定の状況では NINetworkImageViews の一部が間違った画像を表示します。

画像のパスがなく、NINetworkImageView がデフォルトの画像を表示する必要がある場合に発生すると思います。ときどき (数回) デフォルトの画像を表示する代わりに、CollectionView の他の NINetworkImageView に属する別の画像が表示されます。

関連するコードは次のとおりです。

- (UICollectionViewCell*) collectionView:(UICollectionView *)collectionView   cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"ShelvingCell";
    ShelvingCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

    // Prueba para ver si esto arregla lo de que se repitan imágenes
    [cell.feedNetworkImageView prepareForReuse];

    cell.feedNetworkImageView.delegate = self;

    // El collage necesita un tratamiento especial
    if (indexPath.section == 0 && indexPath.row == 0)
    {
        cell.feedTitleLabel.text = @"";
        cell.lastFeedNewTitleLabel.text = @"";
        // Prueba para ver si esto arregla lo de que se repitan imágenes
        [cell.feedNetworkImageView setPathToNetworkImage:@""];

        // Prueba para ver si esto arregla lo de que se repitan imágenes
        [cell.feedNetworkImageView prepareForReuse];

        cell.feedNetworkImageView.image = [UIImage imageNamed:@"collage.png"];
    }
    else
    {    
        MOFeed *feed = [self.feeds objectAtIndex:(indexPath.section*3 + indexPath.row - 1)];
        cell.feedTitleLabel.text = feed.title;

        // Recuperamos la última noticia del feed
        MONoticia *ultimaNoticia = [feed lastFeedNew];

        cell.lastFeedNewTitleLabel.text = ultimaNoticia.title;

        if (![feed.feedImageURL isEqualToString:@""] && feed.feedImageURL)
        {
            // Prueba para ver si esto arregla lo de que se repitan imágenes
            [cell.feedNetworkImageView prepareForReuse];
            [cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
        }
        else
        {
            // Prueba para ver si esto arregla lo de que se repitan imágenes
            [cell.feedNetworkImageView prepareForReuse];

            cell.feedNetworkImageView.image = [UIImage imageNamed:@"shelvingcell.png"];
            // Prueba para ver si esto arregla lo de que se repitan imágenes
            [cell.feedNetworkImageView setPathToNetworkImage:@""];
        }
    }
    return cell;
}

どうもありがとう!

カルロス

4

2 に答える 2

0

カルロス、私はNINetworkImageViewについてあまり知りませんが、私の理論では、UICollectionViewはあなたのビューを再利用しており、あなたはリクエストをキャンセルしていません. 最初のセルをロードすると、その画像に対するリクエストがトリガーされたとします。次に、スクロールを開始します。その最初のセルは、最初のリクエストが終了する前に再利用されます。おそらく、そのセルを再利用するこの新しいアイテムには画像がないため、setPathNetwork を呼び出さないでください...その結果、再利用された新しいセルには最初のセル画像が含まれます。

おそらく、NINetworkImageView にリクエストをキャンセルするメソッドがあります。これらのビューのいずれかを再利用するたびに呼び出します。

アンサルド!

于 2013-01-22T00:12:37.437 に答える