2016-05-18 8 views
0

インターネット経由でアルバムをダウンロードすると、カバー画像付きのフォルダがいくつか作成されます。その画像をcollectionViewに表示したい場合は、常にすべてのアルバムに対して同じ画像を表示します。たとえば、アルバム1、アルバム2、アルバム3をablum 1でそれぞれcover.png、ablum2でcover.png、album3でcover.pngをダウンロードしたとします。ここアルバムにダウンロードされたCollectionView画像は、すべてのCollectionViewCellで同じです。

コードである:(Iバンドル内の画像と配列から来ている画像を使用するかどうかをテストするために、それが動作することを私は正確)。

#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); 
} 

編集:私はそれをステップバイステップで行うと が、その行が仕事をしていないようです。

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

は良いイメージをロードしません。私は理解していないのは、私がipadで直接iexplorerをチェックしているので、coverImagePathを読むとその名前が良い、カバーが良いイメージだからですが、imageView.imageへのイメージのロードは良くありません。名前が正しい場合でも常にすべてのセルビューで繰り返される最初のイメージです。奇妙な。

第2編集: あなたの情報のために、画像カバーの名前は各フォルダcover.pngで同じですか、それは問題ですか?

+0

CollectionViewの各行に1つのセルがありますか? – Signo

+0

うん、私は "細胞"と呼ばれる細胞は1つだけです。 – Claudio

+0

CollectionViewの行の量に基づいて毎回異なる値が返されるかどうかを調べるには、indexPath.rowの値をNSlogする必要があります。同様の問題があり、IndexView.sectionを使用する必要がありました。それぞれ1行しかないので、indexPath.rowを使うと常に1が返されます。 – Signo

答えて

0

第一補正:私はカバーの画像に別の名前を使用し、それが機能するようになりました。私は、XcodeとObjective Cは、異なるフォルダから来て、同じ名前の複数のセル画像を表示すると非常にうまく管理できないと思います(例えば、cover.png。代わりにcover_album1.png、cover_album2.pngなど... )。

第二補正:CollectionViewCell.mで

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

私は正確にあなたが使用している場合ということ:私はコレクションビューの画像を更新するために、次のコードを追加しなければならなかったことを、私は正確なストーリーボード付きのcollectionViewは、initWithFrameの代わりにinitWithCoderを使用する必要があります。

関連する問題