UICollectionViewでCollectionViewLayoutを変更しようとすると落ちる

UICollectionViewでsetCollectionViewLayout(_:animated:)でレイアウトを変更しようとしていたところ、以下のエラーで落ちてしまった。

2017-07-31 11:57:49.110 CollectionViewLayout[3621:83128] *** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘*** setObjectForKey: object cannot be nil (key: {length = 2, path = 0 – 6})’

直前は、
カスタムのUICollectionViewLayoutがオーバーライドしている、layoutAttributesForItem(at:)が呼ばれていたので、
その中をみてみると、UICollectionViewLayoutAttributesの生成を、indexPathを指定して初期化していなかったのが原因だった。

修正前

let attributes = UICollectionViewLayoutAttributes()

修正後

let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)

普通は、prepare()メソッドなんかで、あらかじめ全indexPathの分のattributesを作っておくのかもしれないが、
今回は、テスト的にいじっていたので、layoutAttributesForItem(at:)内で、都度生成していた。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

メインはWeb系エンジニアです。

コメント

コメントする

目次