2

このチュートリアルに従って、UICollectionView を作成しました。問題なくコードをコピーしましたが、試してみるとクラッシュします

- (void)viewDidLoad
{
    [super viewDidLoad];
    gridImages = [[NSMutableArray alloc]init];
    [gridImages addObject: @"test.jpg"];
    [gridImages addObject: @"test.jpg"];
    [gridImages addObject: @"test.jpg"];
    [gridImages addObject: @"test.jpg"];
    [gridImages addObject: @"test.jpg"];

}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return gridImages.count;
}


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

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *gridImageView = (UIImageView *)[cell viewWithTag:100];

    gridImageView.image = [UIImage imageNamed:[gridImages objectAtIndex:indexPath.row]];

    return cell;
}

クラッシュは次の行にあります。

 UIImageView *gridImageView = (UIImageView *)[cell viewWithTag:100];

viewwithtag を 99 や 101 のように変更すると機能しますが、コレクション ビューは test.jpg 画像ではなく単なるボックスとして表示されます。viewwithtag とは正確には何ですか?

クラッシュ:

[UICollectionViewCell setImage:]: unrecognized selector sent to instance 0x1659b300'

何が起こっているのか分かりますか?

編集: 申し訳ありませんが、タグ 100 は、ストーリーボードのコレクションビューの UIImageView に関連付けられたタグです。それでもクラッシュしますが

4

2 に答える 2

4

内部の UIImageView ではなく、UICollectionViewCell 自体に 100 タグを設定したと推測する必要があります。または、両方のビューに同じタグ セットがあります。viewWithTag は、そのタグで見つかった最初のビューを返すため、それらを一意にする必要があります。最初に誤ってセル全体にタグを設定し、セルから削除するのを忘れて画像ビューに設定した可能性がありますか? どの UIView サブクラスにもタグを付けることができるため、タグを設定する前にどのビューが選択されているか注意する必要があります。

クラッシュは、viewWithTag: メソッドが UICollectionViewCell インスタンスを返しているためであり、(「gridImageView.image = ...」行を介して) 呼び出している setImage: メソッドを実装していないためです。

于 2013-10-12T05:33:33.283 に答える