¿Seguimiento de NSLayoutConstraint Crash?

Tengo un problema con algunas configuraciones de NSLayoutConstraint que aparecieron en iOS9 (creo). De todos modos, obtengo el siguiente error de console:

Este NSLayoutConstraint se configura con una constante que excede los límites internos. Se sustituirá un valor menor, pero este problema debe solucionarse. Rompe en vacío _NSLayoutConstraintNumberExceedsLimit () para depurar. Esto se registrará solo una vez. Esto puede romperse en el futuro.

Seguido por:

* Terminar la aplicación debido a una exception no detectada 'NSInvalidArgumentException', razón: '* + [NSLayoutConstraint constraintWithItem: atributo: relatedBy: toItem: atributo: multiplicador: constante:]: no se puede establecer una restricción entre un atributo anterior / posterior y un derecho / izquierdo atributo. Utilice el avance / avance para ambos o ninguno de los dos. '

Luego, un montón de información de la stack:

 *** First throw call stack: ( 0 CoreFoundation 0x0000000102b3af65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x00000001025aedeb objc_exception_throw + 48 2 CoreFoundation 0x0000000102b3ae9d +[NSException raise:format:] + 205 3 Foundation 0x0000000102177e82 +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:] + 299 4 My App 0x000000010011f429 -[APStatisticsAverageFlightDuration viewDidInit] + 2841 5 My App 0x000000010011e909 -[APStatisticsAverageFlightDuration awakeFromNib] + 73 6 UIKit 0x000000010328752e -[UINib instantiateWithOwner:options:] + 2416 7 UIKit 0x000000010307284d -[UIViewController _loadViewFromNibNamed:bundle:] + 381 8 UIKit 0x0000000103073179 -[UIViewController loadView] + 178 9 UIKit 0x00000001032aad85 -[UITableViewController loadView] + 84 10 UIKit 0x000000010307347c -[UIViewController loadViewIfRequinetworking] + 139 11 UIKit 0x0000000103073c7d -[UIViewController view] + 27 12 UIKit 0x00000001037ded8e __67-[UIStoryboardEmbedSegueTemplate newDefaultPerformHandlerForSegue:]_block_invoke + 524 13 UIKit 0x00000001035cf189 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 460 14 UIKit 0x00000001035cef8c -[UIStoryboardSegueTemplate _perform:] + 82 15 UIKit 0x00000001035cf250 -[UIStoryboardSegueTemplate perform:] + 156 16 UIKit 0x0000000103073687 -[UIViewController loadViewIfRequinetworking] + 662 17 UIKit 0x00000001030b6c26 -[UINavigationController _layoutViewController:] + 54 18 UIKit 0x00000001030b74dd -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 433 19 UIKit 0x00000001030b7633 -[UINavigationController _startTransition:fromViewController:toViewController:] + 116 20 UIKit 0x00000001030b8879 -[UINavigationController _startDefernetworkingTransitionIfNeeded:] + 890 21 UIKit 0x00000001030b967d -[UINavigationController __viewWillLayoutSubviews] + 57 22 UIKit 0x000000010325163d -[UILayoutContainerView layoutSubviews] + 248 23 UIKit 0x0000000102f9911c -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710 24 QuartzCore 0x000000010146f36a -[CALayer layoutSublayers] + 146 25 QuartzCore 0x0000000101463bd0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 26 QuartzCore 0x0000000101463a4e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 27 QuartzCore 0x00000001014581d5 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 28 QuartzCore 0x00000001014859f0 _ZN2CA11Transaction6commitEv + 508 29 UIKit 0x0000000102f1253a _afterCACommitHandler + 174 30 CoreFoundation 0x0000000102a669d7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 31 CoreFoundation 0x0000000102a66947 __CFRunLoopDoObservers + 391 32 CoreFoundation 0x0000000102a5c59b __CFRunLoopRun + 1147 33 CoreFoundation 0x0000000102a5be98 CFRunLoopRunSpecific + 488 34 GraphicsServices 0x0000000106016ad2 GSEventRunModal + 161 35 UIKit 0x0000000102ee8676 UIApplicationMain + 171 36 My App 0x000000010026c2cf main + 111 37 libdyld.dylib 0x000000010491f92d start + 1 38 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException 

¿Cómo se supone que debo rastrear qué restricción está causando el problema? Tengo docenas y docenas. He agregado el punto de interrupción _NSLayoutConstraintNumberExceedsLimit() que me detiene en esta línea:

 NSArray *constraintAircraftV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[xLabelsCV(==lblCvHeight)]-spacing-[timePeriodCV(==timePeriodCvHeight)]-spacing-[aircraftCV(==aircraftCvHeight)]" options:0 metrics:metrics views:views]; 

¿Cómo se supone que debo determinar dónde está el problema aquí? El código no ha cambiado, pero acaba de dejar de funcionar a partir de la actualización de iOS9.

Cualquier ayuda para depurar esto sería muy apreciada, gracias.

Oye, no creo que _NSLayoutConstraintNumberExceedsLimit () esté causando el locking. Es solo una advertencia. Pero aún así, debería ser arreglado idealmente.

Enfocándose en el crash por ahora. El problema radica en:

[NSLayoutConstraint constraintWithItem: atributo: relatedBy: toItem: atributo: multiplicador: constante:]: no se puede establecer una restricción entre un atributo anterior / posterior y un atributo derecho / izquierdo. Utilice el avance / avance para ambos o ninguno de los dos. '

Tal vez en algún lugar de sus limitaciones haya asociado NSLayoutAttributeLeading para un elemento a NSLayoutAttributeLeft. ¿Puedes poner el código donde agregas las restricciones?

Este es un nuevo problema de iOS 9. replace:

 [self addConstraint:[NSLayoutConstraint constraintWithItem:self.skipButton attribute:NSLayoutAttributeTrailling relatedBy:NSLayoutRelationEqual toItem:self **attribute:NSLayoutAttributeRight** multiplier:XXX constant:XXX]]; 

para que los dos attributes sean los mismos:

 [self addConstraint:[NSLayoutConstraint constraintWithItem:self.skipButton attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeRight multiplier:XXX constant:XXX]]; 

Ambos casos de atributo: NSLayoutAttributeXXXX tienen que ser iguales.