0

UIcollectionviewcell データでは、最初はセルに読み込まれませんが、セルのレイアウトが読み込まれます。最後のセルまでスクロールして戻ると、問題なくデータが正しく入力されているように見えます。json 配列からデータを取得しています。json 配列を取得した後、コレクション ビューをリロードしています。自動レイアウトのストーリーボードでプロトタイプセルを使用しています。ボタンアクションを使用してリロードを試みましたが、その場合、表示されているセルのみが更新されますフローレイアウトと水平スクロールを使用していますこれはcellforitemのコードです

  - (UICollectionViewCell *)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
{
 UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ColCell" forIndexPath:indexPath];

 UIImageView *img1=(UIImageView *)[cell viewWithTag:13];


 img1.image = [UIImage imageNamed:@"profile_pic.png"];

 if (![[[tableArray objectAtIndex:indexPath.row] valueForKey:@"img_extension"]isEqual:[NSNull null]]  ) {
    [img1 sd_setImageWithURL:[NSURL URLWithString:[[tableArray objectAtIndex:indexPath.row]valueForKey:@"img_extension"]] placeholderImage:nil completed:^(UIImage *image12, NSError *error, SDImageCacheType cachetype, NSURL *imageurl){

        if(error)
            img1 .image = nil;
        else
            img1 .image = image12;
        CGPoint saveCenter1 = img1.center;
        CGRect newFrame1 = CGRectMake(img1.frame.origin.x, img1.frame.origin.y,50, 50);
        img1.frame = newFrame1;
        img1.layer.cornerRadius = 50 / 2.0;
        img1.center = saveCenter1;
        img1.clipsToBounds = YES;
    }];
 }
 UILabel *lbl1=(UILabel *)[cell viewWithTag:1];
 UILabel *lbl2=(UILabel *)[cell viewWithTag:2];
 UILabel *lbl3=(UILabel *)[cell viewWithTag:3];
 UILabel *lbl4=(UILabel *)[cell viewWithTag:4];
 UILabel *lbl5=(UILabel *)[cell viewWithTag:5];
 UILabel *lbl6=(UILabel *)[cell viewWithTag:6];
 UILabel *lbl11=(UILabel *)[cell viewWithTag:11];
 UILabel *lbl12=(UILabel *)[cell viewWithTag:12];
 UITextView *txtvw = (UITextView *)[cell viewWithTag:7];
 lbl1.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"strong_hand"];
 lbl2.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"athleticism"];
 lbl3.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"stick_skills"];
 lbl4.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"dodging"];
 lbl5.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"shooting"];
 lbl6.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"lacrosse"];
 lbl11.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"instructor_name"];
 lbl12.text=@"INSTRUCTER";
 txtvw.text = [[tableArray objectAtIndex:indexPath.row]valueForKey:@"comment"];

 [cell layoutSubviews];
 return cell;
}
4

2 に答える 2

0

この行にブレークポイントを置き、lbl2.text=[[tableArray objectAtIndex:indexPath.row]valueForKey:@"athleticism"];これをデバッガ コンソールpo [[tableArray objectAtIndex:indexPath.row]valueForKey:@"athleticism"]に入力して Enter キーを押します。これにより、配列にデータがあるかどうかがわかります。

nil応答として取得した場合は、tableArrayそれ自体が nilかどうかを確認してくださいpo tableArray

また、なぜそんなにひどい方法でコードを書いたのですか? IBOutlets であるプロパティを作成するのではなく、オブジェクトを使用viewWithTagして、それらにアクセスできるようにするのはなぜですか? なぜ objectForKey を使用しているのですか? 単にオブジェクトへの参照を取得してから使用しないのはなぜですか?cellcell.titleLabel.text = ...MyClass* object = [tableArray objectAtIndex:indexPath.row];lbl1.text = object.strong_hand;

于 2015-11-04T08:54:26.687 に答える