Simple UICollectionView de montrer des images se comporte de façon étrange: Certaines Images sont affichées correcte, certains en mauvaise position, il manque à tous

Je veux afficher les images dans une grille sur l'iPhone à l'aide d'un UICollectionView, montrant 3 images consécutives. Pour un "simple test" (comme je le pensais), j'ai ajouté 15 images JPG de mon projet, de sorte qu'ils vont être dans mon baluchon et je peux les charger simplement par le biais de [UIImage imageNamed:...].

Je pense que j'ai tout fait correct (mise en place de & de l'enregistrement des UICollectionViewCell sous-classe, l'utilisation de UICollectionViewDataSource Protocole de méthodes), cependant, la UICollectionView se comporte très bizarre:

Il ne montre que quelques unes des images dans le modèle suivant:
La première ligne montre l'image 1 & 3, deuxième ligne est vide, à côté de la ligne, comme la première fois (image 1 & 3 montrant correctement), quatrième ligne vide, et ainsi de suite...

Si j'appuie sur un bouton dans ma barre de navigation qui déclenche [self.collectionView reloadData], au hasard des cellules apparaissent ou disparaissent. Ce qui me motive les noix, c'est que ce n'est pas seulement une question de l'apparition des images ou pas. Parfois, les images aussi échanger entre les cellules, c'est à dire qu'ils apparaissent pour un indexPath ils ne sont certainement pas câblé!

Voici mon code pour la cellule:

@interface AlbumCoverCell : UICollectionViewCell
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@end

@implementation AlbumCoverCell
@synthesize imageView = _imageView;
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _imageView = [[UIImageView alloc] initWithFrame:frame];
        [self.contentView addSubview:_imageView];
    }
    return self;
}

- (void)dealloc
{
    [_imageView release];
    [super dealloc];
}

- (void)prepareForReuse
{
    [super prepareForReuse];
    self.imageView.image = nil;
}
@end

Partie du code pour mon UICollectionViewController sous-classe, où "imageNames' est un NSArray la tenue de tous les noms de fichiers jpg:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.collectionView registerClass:[AlbumCoverCell class] forCellWithReuseIdentifier:kAlbumCellID];
}

#pragma mark - UICollectionViewDataSource Protocol methods
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [self.imageNames count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    AlbumCoverCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kAlbumCellID forIndexPath:indexPath];
    NSString *imageName = [self.imageNames objectAtIndex:indexPath.row];
    NSLog(@"CV setting image for row %d from file in bundle with name '%@'", indexPath.row, imageName);
    cell.imageView.image = [UIImage imageNamed:imageName];

    return cell;
}

#pragma mark - UICollectionViewDelegateFlowLayout Protocol methods
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
{
    return CGSizeMake(100, 100);
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
{
    return UIEdgeInsetsMake(0, 0, 0, 0);
}

De la NSLog déclaration dans cellForItemAtIndexPath: je peux voir que la méthode est appelée pour toutes les cellules (pas seulement celui qui est affiché) et que la correspondance entre la indexPath.de ligne et le nom de fichier est correct.

Personne n'a une idée de ce qui a pu provoquer ce comportement bizarre?

InformationsquelleAutor Tafkadasoh | 2012-12-06