2016-05-18 3 views
0

Wenn ich Alben über das Internet lade, erstellt es einige Ordner mit einem Titelbild darin. Wenn ich dieses Bild in einer collectionView anzeigen möchte, wird für alle Alben immer dasselbe Bild angezeigt. Zum Beispiel, wenn ich Album 1, Album 2, Album 3 mit jeweils cover.png in ablum 1, cover.png in ablum2, cover.png in album3 herunterlade.CollectionView Bild heruntergeladen in Alben ist das gleiche für alle CollectionViewCells

Hier ist der Code: (Ich präzis, dass für Tests, wenn ich Bilder verwenden, die aus einem Array mit Bildern im Bundle kommen, funktioniert es).

#pragma mark - Collection View 
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return [[DBManagement database] getNBDownloadedAlbums: [[NSUserDefaults standardUserDefaults] objectForKey:@"SettingsWebview"]]; 
} 


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *identifier = @"cell"; 

    AlbumsController *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 
    if (!cell) 
    { 
     cell = [[AlbumsController alloc] initWithFrame:CGRectMake(0,0,cell.frame.size.width , cell.frame.size.height)]; 
    } 

    NSString * coverImagePath = [[[[albums objectAtIndex:indexPath.row] objectForKey:@"URL"] stringByDeletingLastPathComponent] stringByAppendingString:@"/cover.png"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if ([fileManager fileExistsAtPath:coverImagePath]) 
    { 
     NSLog(@"Cover : perso"); 
     cell.imageView.image = [UIImage imageNamed:coverImagePath]; 
     cell.label.text = coverImagePath; 
    } 
    else 
    { 
     NSLog(@"Cover : generique"); 
     cell.imageView.image = [UIImage imageNamed:@"nocover.png"]; 
     cell.label.text = @"nocover.png"; 
    } 

    return cell; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(200, 155); 
} 
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(5, 5, 5, 5); 
} 

EDIT: Wenn ich es Schritt für Schritt tun, es scheint, dass Linie nicht die Arbeit erledigt:

cell.imageView.image = [UIImage imageNamed:coverImagePath]; 

nicht das gute Bild zu laden. Ich verstehe das nicht, denn wenn ich den coverImagePath lese, ist der name gut, das cover ist das gute bild, da ich mit dem iexplorer direkt auf dem ipad nachschaue, aber die bildladung in das imageView.image ist nicht gut. Es ist immer das erste Bild, das sich auf jeder Zellenansicht wiederholt, auch wenn der Name korrekt ist. Seltsam.

2. EDIT: Für Ihre Informationen, der Name der Bilder Abdeckung sind die gleichen in jedem Ordner cover.png, ist es das Problem?

+0

Haben Sie für jede Zeile in Ihrem CollectionView eine einzelne Zelle? – Signo

+0

Ja, ich habe nur eine Zelle, die "Zelle" genannt wird. – Claudio

+0

Sie sollten NSlog die Werte von indexPath.row, um zu sehen, ob es jedes Mal unterschiedliche Werte basierend auf der Anzahl der Zeilen in Ihrer CollectionView zurückgegeben, hatte ich ein ähnliches Problem, und ich musste nur indexPath.section verwenden, weil meine CollectionView N hatte Abschnitt jedes mit nur 1 Zeile, so dass die Verwendung von indexPath.row immer zurückgegeben 1 – Signo

Antwort

0

1. Korrektur: Ich habe verschiedene Namen für die Cover-Bilder verwendet und es funktioniert jetzt. Ich denke, Xcode und Objective C funktionieren nicht sehr gut, wenn mehrere Bilder aus verschiedenen Ordnern mit demselben Namen (zB cover.png) angezeigt werden. Stattdessen setze ich cover_album1.png, cover_album2.png usw. ein.).

2. Korrektur: Ich genau, dass ich den folgenden Code hinzuzufügen hatte für die Bilder der Ansicht Sammlung zu erneuern:

im CollectionViewCell.m

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) 
    { 
     self.imageView = [UIImageView new]; 
    } 
    return self; 
} 

ich genau, dass, wenn Sie verwenden eine CollectionView mit dem Storyboard, müssen Sie initWithCoder anstelle von initWithFrame verwenden.

Verwandte Themen