23

私は初めてUICollectionViewで、Webで見つけたチュートリアルに従っていますが、理解できないエラーで立ち往生しています。ここに少しコンテキストがあります。

デバッガーでは、次のことが起こっていることがわかります。

  • numberOfSectionsInCollectionView:が呼び出され、1を返します
  • collectionView:numberOfItemsInSection:と呼ばれ、モデルのサイズを返します(20)
  • collectionView:layout:sizeForItemAtIndexPath:モデル内のアイテムごとに1回呼び出されます
  • collectionView:layout:insetForSectionAtIndex:と呼ばれる
  • collectionView:cellForItemAtIndexPath:呼び出され、この行でクラッシュします...

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
    

このエラーで...

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'

その行で実行を一時停止してコンソールを確認すると、レイアウトがあるように見えます...

(lldb) po collectionView.collectionViewLayout
(UICollectionViewLayout *) $4 = 0x07180fd0 <UICollectionViewFlowLayout: 0x7180fd0>

UICollectionViewは、ストーリーボードの唯一のシーンの一部です。viewController.mには、他にUICollectionView作成されたものはありません。

誰かアイデアはありますか?

4

6 に答える 6

32

これは私のために働いた:

UICollectionViewFlowLayout *aFlowLayout = [[UICollectionViewFlowLayout alloc] init];
    [aFlowLayout setItemSize:CGSizeMake(200, 140)];
    [aFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
myCollectionViewController = [[MyCollectionViewController alloc]initWithCollectionViewLayout:flowLayout];

プログラムで UICollectionView を作成する場合は、レイアウトが必要です。

于 2012-11-04T21:48:47.637 に答える
18

結局のところ、問題はregisterClass:. 私はこれを持っていました:

[self.collectionView registerClass:[UICollectionView class] 
        forCellWithReuseIdentifier:@"MyCell"];

しかし、それはこれであるべきでした:

[self.collectionView registerClass:[UICollectionViewCell class] 
        forCellWithReuseIdentifier:@"MyCell"];

そのため、dequeue メソッドはUICollectionViewではなく を作成していましたUICollectionViewCell

于 2012-11-05T05:15:19.657 に答える
3

私は同じ問題を抱えており、私は使用して解決しました

UICollectionViewFlowLayout *myLayout = [[UICollectionViewFlowLayout alloc]init];
[myLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[myLayout setMinimumInteritemSpacing:0.0f];
[myLayout setMinimumLineSpacing:0.0f];
UICollectionView *myCollectionView = [[UICollectionView alloc]initWithFrame:viewfame collectionViewLayout:myLayout];

それ以外の

UICollectionView *myCollectionView = [[UICollectionView alloc]initWithFrame:self.view.frame];
[myLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[myLayout setMinimumInteritemSpacing:0.0f];
[myLayout setMinimumLineSpacing:0.0f];
[myCollectionView setCollectionViewLayout:myLayout];
于 2015-01-05T07:34:02.327 に答える
0

ビューが初期化される前に、 itemSize が self.view.bounds に等しい UICollectionViewLayout オブジェクトを返すときに、この問題が発生していました。

于 2015-02-20T18:23:52.657 に答える