UICollectionViewControllerアプリの状態ごとに異なるレイアウトを使用するコレクション ビューを管理しています。-setCollectionViewLayout:animated:異なるレイアウト間を移行するために使用しています。悪いアクセス エラーが発生しました。コレクション ビューの現在のレイアウトを実際に所有しているもの(参照を保持しているものなど) を知ることは非常に役立ちます。strong
を呼び出した後-setCollectionViewLayout:animated:、次のことに気付きました ( はどこにselfありますかUICollectionViewController):
self.collectionView.collectionViewLayout新しいレイアウトを返します。self.collectionViewLayoutまだ古いレイアウトを返します。
これにより、この動作を説明するUICollectionView Class Referenceを確認するようになりました。
collectionViewLayout
コレクション ビュー コントローラーの初期化に使用されるレイアウト オブジェクト。(読み取り専用)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout解説
このプロパティには、initWithCollectionViewLayout: メソッドに渡したレイアウト オブジェクトが含まれます。このプロパティのレイアウト オブジェクトは、コレクション ビュー自体への変更を反映するために更新されません。このプロパティを使用して、最初にコレクション ビューで使用するように構成したレイアウト オブジェクトを参照できます。
わかった。したがってself.collectionViewLayout、初期レイアウトへの弱参照 (またはそうですか?) でありself.collectionView.collectionViewLayout、現在のレイアウトへの強参照です。
これを確認するために、デバッガーに飛び込みましたが、実際にUICollectionView所有されていると思われるUICollectionViewController. 代わりに、コレクション ビュー コントローラーの_view変数は のインスタンスでしUICollectionViewControllerWrapperViewた。なに?
この経験全体から、次のような疑問が残りました。
- に実際
UICollectionViewに格納されているのはどこUICollectionViewControllerですか? - 初期レイアウトへの参照を
self.collectionViewLayout保持しますか?strong