4

UICollectionViewカスタムUICollectionViewCellクラスを利用するがあります。基本的な考え方は、コレクション ビューがディレクトリを走査し、ディレクトリ内に含まれる写真を表示することです (結果は API 呼び出しを介して)。最初のビュー コントローラーには が表示さUICollectionViewれ、セルをタップすると、新しい で新しいビューが生成されUICollectionViewます。ディレクトリの内容はNSMutableDictionary、ディレクトリ ID をキーにして に格納されます。

この問題は、写真のかなり短いリスト (通常は 30 枚未満) を使用して新しいビュー/コレクションビューが作成されたときに発生します。デバイスを回転させると、コレクション ビューが再レンダリングを試み、アプリが「インデックス X を超えるbounds [0 .. Y]"、X は Y (配列の最後の要素) より大きい数値です。

これは、新しく表示されたコレクション ビューのアイテムが「ルート」コレクション ビューよりも少ない場合にのみ発生する傾向があることに気付きました。

関連する(とにかくその一部)コードの例を次に示します。

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {
    return [[photos objectForKey:api.directoryID] count];
}

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView {
    return 1;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    PhotoCell *photoCell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    photoCell.photo = [[photos objectForKey:api.directoryID] objectAtIndex:indexPath.row];
    return photoCell;
}

少なくとも、 で try/catch を実行したいのですが、try/catch をcellForItemAtIndexPathどこに配置すればよいかわかりません。おそらく習慣でUICollectionView

ありがとう!

4

1 に答える 1