2

を使用してUICollectionView、別の を追加しようとしていUICollectionViewCellます。この最初のコードは最初のセルを示しており、正常に実行されます。別の を追加しようとすると、問題が発生しUICollectionViewCellます。

static NSString *identifier = @"Cell"; // Default Cells

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UIImageView *illustrationImage = (UIImageView *)[cell viewWithTag:100];
illustrationImage.image = [UIImage imageNamed:[stackImage objectAtIndex:indexPath.row]];

UILabel *stackLabel = (UILabel *)[cell viewWithTag:12];
[stackLabel setText:[stackTitle objectAtIndex:indexPath.row]];

そして、ここで、コンテンツが異なるまったく新しいセルを my に追加したいと思いUICollectionViewます。このコードを実行するたびに、全体が起動を拒否します:

static NSString *newIdentifier = @"AddNewCell"; 

UICollectionViewCell *newCell = [collectionView dequeueReusableCellWithReuseIdentifier:newIdentifier forIndexPath:indexPath];

UIImageView *addNewImage = (UIImageView *)[newCell viewWithTag:120];
addNewImage.image = [UIImage imageNamed:[addNew objectAtIndex:indexPath.row]]; // This line makes the app crash

return cell;
return newCell;

エラーメッセージ

キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: ' * -[__NSArrayI objectAtIndex:]: 境界を超えたインデックス 1 [0 .. 0]'

これは と関係があると思いますindexPath.row。次のコードのセクションを「0」に置き換えると、indexPath.rowクラッシュはしませんが、UICollectionView.

[addNew objectAtIndex:indexPath.row]]
4

1 に答える 1

3

まず、コードの他の場所ではなく、 collectionView:cellForItemAtIndexPath:メソッドで提供したコード スニペットを実行していると仮定 します。

また、上記のメソッド内で一度に2つのセルを作成することも返すこともできません!!。パラメータとして受け取ったインデックス パスに基づいて、どのセルをデキューし、インスタンス化し、返すかを決定する必要があります。

さて、あなたが受け取っている「境界を越えたインデックスaddNew」エラーについて:アクセスしたいときに実際には配列に存在しない、呼び出された配列の要素にアクセスしようとしています。あなたの場合、配列の2番目の要素( index 1)にアクセスしようとすると、配列には要素が1つしかありません( index 0)。

配列にアクセスする前にaddNew、配列が適切に初期化されていることを確認することをお勧めします。

于 2013-07-25T08:22:31.247 に答える