2012-11-01 11 views
5

Wenn ich das Layout einer während einer Orientierungsänderung ändern, bekomme ich EXC_BAD_ACCESS nach ein paar Umdrehungen.EXC_BAD_ACCESS on 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 
} 

Ist das ein UICollectionView Bug? Oder mache ich etwas falsch? Wenn es sich um einen Fehler handelt, gibt es eine Möglichkeit, das gesamte Layout während einer Orientierungsänderung zu ändern?

Ich bemerkte, dass das gleiche Problem in diesem answer erwähnt wird. Das Debuggen mit NSZombies erzeugt keine zusätzlichen Informationen.

+0

Haben Sie das jemals herausgefunden? Ich habe ein ähnliches Problem mit dem Ändern des Layouts mit '[collectionView setCollectionViewLayout: Layout animiert: animiert]'. Das Backtrace sieht wie folgt aus: '* thread # 1: tid = 0x1c03, 0x01780098 libobjc.A.dylib \ 'objc_msgSend + 12, stop Grund = EXC_BAD_ACCESS (Code = 1, Adresse = 0xc0000000) Frame # 0: 0x01780098 libobjc.A. dylib \ 'objc_msgSend + 12 Rahmen # 1: 0x008f6ed5 UIKit \' - [UICollectionViewData _setLayoutAttributes: atGlobalItemIndex:] + 62 Rahmen # 2: 0x008f80f6 UIKit \ '__45- [UICollectionViewData validateLayoutInRect:] _ block_invoke_0 + 1004' – Gujamin

+0

Wahrscheinlich zu http bezogenen : //stackoverflow.com/questions/15786084/uicollectionview-bad-acces-on-uiclectionviewdata-setlayoutattributesatglo, auch noch offen. –

+0

Gibt es zufällig einen UIDynamicAnimator, der dieses Layout verwendet? (** Edit: ** Ich vermute nicht, wenn das vor 10 Monaten gepostet wurde.) –

Antwort

1

Nicht ganz sicher, es hat etwas zu tun, aber die Release Notes for iOS 6 sagen:

Die willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration: und didRotateFromInterfaceOrientation: Methoden nicht mehr aufgerufen auf jedem View-Controller, die über eine Vollbild-Darstellung macht selbst-für Beispiel presentViewController:animated:completion:

Sie sollten sicherstellen, dass Ihre Apps diese Methoden nicht verwenden, um das Layout von Subviews zu verwalten. Stattdessen sollten sie die Methode des Controllers viewWillLayoutSubviews verwenden und das Layout unter Verwendung von des Begrenzungsrechtecks ​​der Ansicht anpassen.

Da Sie verwenden UICollectionViewvielleicht, es hat etwas zu tun, dass Sie diese Methode verwenden, das Layout zu ändern.

+0

Ich glaube, das ist nicht der Fall, da der betreffende View-Controller der Haupt-View-Controller ist und nicht über presentViewController dargestellt wird: animated: completion :. – hpique