0

私はかなり長い間この問題を解決しようとしてきましたが、まだ理解できません。私が持っているのは、ストーリー ボードのカスタム テーブル ビュー セルです。セルに 6 つのビューを追加し、各ビューには imageView サブビューがあります。ビューのタグを設定して、後でアクセスできるようにします。このテーブルは、アプリのサムネイル ビューとして機能します。問題は、特定の行で、最後のサムネイル コンテナ ビューがサブビューとしてイメージビューを持たなくなり、クラッシュすることです。

以下は、テーブルの画像を設定する際の私のコードです。どんな助けでも大歓迎です。ありがとうございました!

  NSString *CellIdentifier = @"ThumbnailCell";
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    //loops through each thumbnails
    for (int i=1; i<=kNumberOfThumbnails; i++)
    {

        //get index of current thumbnail- starting value is 0
        int index=((indexPath.row *kNumberOfThumbnails)+i)-1;
        NSLog(@"index %d",index);
        //create an indexpath given the computed index and cell section
        NSIndexPath *currentIndexPath=[NSIndexPath indexPathForRow:index inSection:indexPath.section];
        //get number of sections
        NSArray *sections = [self.fetchedResultsController sections]; 

        NSInteger count=0;
        id <NSFetchedResultsSectionInfo> sectionInfo = [sections objectAtIndex:indexPath.section];
        //get number of objects for given section
        count = [sectionInfo numberOfObjects]; 

        NSLog(@" i: %d  number of subviews ni thumn container %d",i,thumbContainer.subviews.count);

         //get view container for thumbnails
        UIView *thumbContainer=(UIView *)[cell.contentView viewWithTag:i];


        UIImageView *imageView=[thumbContainer.subviews objectAtIndex:0];// this is where the app crashes.. thumbContainer no longer have a subview (for a specific row only)so it throws out an nsrangeexception

        if (index<count) 
        {

            //get file using the created indexpath
            File *imageFile=[self.fetchedResultsController objectAtIndexPath:currentIndexPath];

            //set image
            imageView.image=[UIImage imageNamed:imageFile.thumbnail];
            thumbContainer.backgroundColor=[UIColor grayColor];

            //set tag for image view for the system to know what file is tapped
            imageView.tag=(currentIndexPath.section*kImageTagMultiplier)+currentIndexPath.row;

            //add tap gesture to thumbnail container view

            UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resultTapped:)];
            tap.numberOfTapsRequired=1;
            [thumbContainer addGestureRecognizer:tap];   


        }
        else {
            imageView.image=[UIImage imageNamed:@""];
            thumbContainer.backgroundColor=[UIColor clearColor];
            for (UIGestureRecognizer *gest in thumbContainer.gestureRecognizers) {
                [thumbContainer removeGestureRecognizer:gest];
            }
        }


   return cell;

ここでやろうとしているのは、オブジェクトの配列があり、各オブジェクトがサムネイル画像で表されていることです。これらのサムネイルを表示するためにテーブルビューを使用しました..各行には固定数のサムネイルがあります. ストーリーボードには、6 つの正方形のビューを持つセルがあり、各ビューにはイメージビューがあります。イメージビューを配置する代わりにコンテナー ビューを追加した理由は、各サムネイルがタップ可能であり、タップジェスチャのビュー (コンテナー ビュー) のサブビュー (イメージ ビュー) のタグを取得して、どのオブジェクトがタップされているかを知る必要があるためです。

ちなみに、クラッシュに遭遇したところにコメントを入れました

4

1 に答える 1

0

UICollectionViewこのようなことのために設計されているため、新しい iOS 6 を使用する必要があります。

于 2012-09-21T06:41:44.243 に答える