मेरे पास UICollectionViewController
एक संग्रह दृश्य प्रबंधित करना है जो विभिन्न ऐप राज्यों के लिए अलग-अलग लेआउट का उपयोग करता है। मैं अलग-अलग लेआउट के बीच संक्रमण के लिए -setCollectionViewLayout:animated:
का उपयोग कर रहा हूं। मैं एक बुरा पहुँच त्रुटि हो रही हैं और यह बेहद को पता है कि वास्तव में मालिक संग्रह देखने के वर्तमान लेआउट (उदाहरण, एक strong
संदर्भ के लिए रहता है) में मदद मिलेगी।UICollectionViewController का लेआउट स्वामित्व (self.collectionView.collectionViewLayout बनाम self.collectionViewLayout)
-setCollectionViewLayout:animated:
कॉल करने के बाद, मैंने देखा है निम्नलिखित (जहां self
UICollectionViewController
है):
self.collectionView.collectionViewLayout
नए लेआउट देता है।self.collectionViewLayout
अभी भी पुराने लेआउट देता है।collectionViewLayout
लेआउट संग्रह दृश्य नियंत्रक को प्रारंभ करने के लिए इस्तेमाल वस्तु:
यह UICollectionView Class Reference है, जो इस व्यवहार बताते हैं की जाँच करने के लिए मुझे का नेतृत्व किया। (केवल पढ़ने के लिए)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout
चर्चा
यह गुण लेआउट वस्तु आप initWithCollectionViewLayout के लिए पारित शामिल हैं: विधि। इस प्रॉपर्टी में लेआउट ऑब्जेक्ट को संग्रह दृश्य में परिवर्तनों को प्रतिबिंबित करने के लिए अद्यतन नहीं किया गया है। आप इस प्रॉपर्टी का उपयोग लेआउट ऑब्जेक्ट को संदर्भित करने के लिए कर सकते हैं जिसे आपने मूल रूप से उपयोग करने के लिए संग्रह दृश्य कॉन्फ़िगर किया था।
ठीक है। तो self.collectionViewLayout
प्रारंभिक लेआउट में एक कमजोर संदर्भ (या यह है?) है और self.collectionView.collectionViewLayout
वर्तमान लेआउट का एक मजबूत संदर्भ है।
इस बात की पुष्टि करने के लिए, मैं डिबगर, में एक डुबकी ले लिया, लेकिन वास्तविक UICollectionView
माना जाता है कि UICollectionViewController
के स्वामित्व को खोजने के लिए सक्षम नहीं था। इसके बजाए, संग्रह दृश्य नियंत्रक का _view
चर UICollectionViewControllerWrapperView
का उदाहरण था। व्हाट?
इस पूरे अनुभव ने मुझे निम्न सवालों के साथ छोड़ दिया:
- कहाँ वास्तविक
UICollectionView
एकUICollectionViewController
में जमा हो जाती है? self.collectionViewLayout
प्रारंभिक जमाव के बारे मेंstrong
संदर्भ रखता है?UICollectionViewControllerWrapperView
एक इवर_subviewCache
कहा जाता है, जो सूचकांक 0. अजीब पर वास्तविकUICollectionView
युक्त एक परिवर्तनशील सरणी है: