2012-11-01 10 views
5

Se cambio il layout di un UICollectionView durante un cambio di orientamento, ottengo EXC_BAD_ACCESS dopo alcune rotazioni.EXC_BAD_ACCESS su setCollectionViewLayout

Si tratta di un bug UICollectionView? O sto facendo qualcosa di sbagliato? Se si tratta di un bug, c'è un modo per cambiare l'intero layout durante un cambio di orientamento?

Ho notato che lo stesso problema è menzionato in questo answer. Il debugging con NSZombies non produce ulteriori informazioni.

+0

Hai mai immaginato questo? Sto riscontrando un problema simile con la modifica del layout utilizzando '[collectionView setCollectionViewLayout: layout animato: animato]'. Il backtrace assomiglia a: '* thread # 1: tid = 0x1c03, 0x01780098 libobjc.A.dylib \' objc_msgSend + 12, motivo stop = EXC_BAD_ACCESS (codice = 1, indirizzo = 0xc0000000) frame # 0: 0x01780098 libobjc.A. dylib \ 'objc_msgSend + 12 telaio # 1: 0x008f6ed5 UIKit \' - [UICollectionViewData _setLayoutAttributes: atGlobalItemIndex:] + 62 telaio # 2: 0x008f80f6 UIKit \ '__45- [UICollectionViewData validateLayoutInRect:] _ block_invoke_0 + 1004' – Gujamin

+0

Probabilmente correlate a http : //stackoverflow.com/questions/15786084/uicollectionview-bad-acces-on-uicollectionviewdata-setlayoutattributesatglo, anche ancora aperto. –

+0

C'è un UIDynamicAnimator che usa questo layout, per caso? (** Modifica: ** Suppongo di no, se questo è stato pubblicato 10 mesi fa.) –

risposta

1

Non abbastanza sicuro che abbia qualcosa a che fare, ma il Release Notes for iOS 6 dire:

Il willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:, e didRotateFromInterfaceOrientation: metodi non sono più chiamati in qualsiasi controller vista che fa una presentazione a schermo intero over stesso - per esempio , presentViewController:animated:completion:

È necessario assicurarsi che le proprie app non stiano utilizzando questi metodi per gestire il layout di qualsiasi subview. Invece, dovrebbero usare il metodo di visualizzazione del controller viewWillLayoutSubviews e regolare il layout usando il rettangolo dei limiti della vista.

Dal momento che si sta utilizzando UICollectionViewforse ha qualcosa a che fare che si sta utilizzando questo metodo per modificare il layout.

+0

Credo che questo non sia il caso, in quanto il controller di visualizzazione in questione è il controller di visualizzazione principale e non presentato tramite presentViewController: animato: completamento :. – hpique