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