2012-11-01 19 views
5

पर EXC_BAD_ACCESS यदि मैं अभिविन्यास परिवर्तन के दौरान UICollectionView का लेआउट बदलता हूं, तो मुझे कुछ घूर्णन के बाद EXC_BAD_ACCESS मिलता है।setCollectionViewLayout

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    UICollectionViewLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 
    self.myCollectionView.collectionViewLayout = layout; // This causes EXC_BAD_ACCESS after a few rotations 
} 

क्या यह UICollectionView बग है? या मुझ से कुछ गलत हो रहा है? यदि यह एक बग है, तो क्या अभिविन्यास परिवर्तन के दौरान पूरे लेआउट को बदलने का कोई तरीका है?

मैंने देखा कि इस समस्या का उल्लेख इस answer में किया गया है। NSZombies के साथ डिबगिंग अतिरिक्त जानकारी नहीं उत्पन्न करता है।

+0

कभी यह पता लगाओ? मुझे '[संग्रह दृश्य सेट कोलेक्शन व्यूलाउट: लेआउट एनिमेटेड: एनिमेटेड]' का उपयोग करके लेआउट को बदलने के साथ एक ही समस्या है। बैकट्रैक इस तरह दिखता है: '* थ्रेड # 1: tid = 0x1c03, 0x01780098 libobjc.A.dylib \' objc_msgSend + 12, कारण रोकें = EXC_BAD_ACCESS (कोड = 1, पता = 0xc0000000) फ्रेम # 0: 0x01780098 libobjc.A। dylib \ 'objc_msgSend + 12 फ्रेम # 1: 0x008f6ed5 UIKit \' - [UICollectionViewData _setLayoutAttributes: atGlobalItemIndex:] + 62 फ्रेम # 2: 0x008f80f6 UIKit \ '__45- [UICollectionViewData validateLayoutInRect:] _ block_invoke_0 + 1004' – Gujamin

+0

शायद http से संबंधित : //stackoverflow.com/questions/15786084/uicollectionview-bad-acces-on-uicollectionviewdata-setlayoutattributesatglo, अभी भी खुला है। –

+0

क्या इस लेआउट का उपयोग करके किसी भी मौके पर UIDynamicAnimator है? (** संपादित करें: ** मुझे नहीं लगता है, अगर यह 10 महीने पहले पोस्ट किया गया था।) –

उत्तर

1

नहीं काफी यकीन है कि यह करने के लिए कुछ न कुछ है लेकिन Release Notes for iOS 6 कहते हैं:

willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:, और didRotateFromInterfaceOrientation: तरीकों नहीं रह गया है कि एक पूर्ण स्क्रीन प्रस्तुति से अधिक बनाता है किसी भी दृश्य नियंत्रक पर कहा जाता है उदाहरण के लिए, presentViewController:animated:completion:

आपको यह सुनिश्चित करना चाहिए कि आपके ऐप्स किसी भी सबव्यू के लेआउट को प्रबंधित करने के लिए इन विधियों का उपयोग नहीं कर रहे हैं। इसके बजाय, उन्हें नियंत्रक की viewWillLayoutSubviews विधि का उपयोग करना चाहिए और दृश्य की सीमा आयताकार का उपयोग करके लेआउट समायोजित करना चाहिए।

जब से तुम UICollectionViewशायद यह है कि आप इस विधि का उपयोग कर रहे हैं अपने लेआउट बदलने के लिए क्या करने के लिए कुछ न कुछ है प्रयोग कर रहे हैं।

+0

मुझे विश्वास है कि यह मामला नहीं है, क्योंकि प्रश्न में दृश्य नियंत्रक मुख्य दृश्य नियंत्रक है और वर्तमान दृश्य नियंत्रक के माध्यम से प्रस्तुत नहीं किया गया है: एनिमेटेड: समापन:। – hpique