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:)内で、都度生成していた。
コメント