presentViewController: falla en iOS <6 (AutoLayout)

92

Este es un accidente extraño que estoy teniendo. El bloqueo ocurre cuando presiono un botón que va a cierto ViewController. La línea en la que choca es:

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];

El rastro del accidente es:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

NOTA: Esto falla en mi iPhone 4 iOS 5.1 pero no en mi iPhone 4S iOS 6 Beta 2

MCKapur
fuente
2
Tuve el mismo problema después de la actualización a Xcode 4.5 ejecutándose y la aplicación en el iphone 5.1 Mire este enlace: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro
Sí, creo que lo hemos establecido :)
MCKapur

Respuestas:

201

Creo que este es un problema con el nuevo constructor de interfaces de Xcode. ¿Construyó su .xib usando el constructor de interfaz de Xcode 4.5? Me he encontrado con el mismo problema hace un momento, y creo que ese es el problema. Mi aplicación funciona con iOS 6, pero no con una versión anterior.

Y debe asegurarse de apagar Use Auto Layoutsus xibs .

Eso se puede hacer mediante:

  1. Abra su xib.
  2. Vaya a la File Inspectorpestaña.
  3. Busque la Interface Builder Documentsección en la barra de herramientas derecha.
  4. Desmarque la Use Auto Layoutopción.
marca
fuente
37
Sí, debes asegurarte de desactivar "usar diseño automático" para tus plumillas.
Wevah
Sí, mismo problema. ¿Qué hacer al respecto? ¿Debo probarlo en Xcode 4.4 (esa podría ser la razón, por alguna extraña razón, mi iPhone 4 iOS 5.1 puede ejecutarse en Xcode 4.5 ... aunque no es iOS 6)
MCKapur
16
En la vista principal de su xib, la sección Documento del constructor de interfaces en la barra de herramientas derecha.
Mark
Para cualquier persona interesada, creé un archivo nib en Xcode 4.5 para un controlador de vista antiguo que configuraba su vista mediante programación. Pronto me di cuenta de que mi nueva plumilla no funcionaría en iOS 5, así que eliminé el archivo de plumilla y comencé a recibir un error similar, ¡incluso aunque el nuevo archivo de plumilla ya no estaba en mi proyecto! La solución fue cambiar el nombre de los archivos .hy .m, uf.
Keller
2
Es un poco preocupante lo que está sucediendo con el control de calidad en Apple en estos días.
ardochhigh
43

Captura de pantalla

Tuve el mismo problema cuando descargué la nueva actualización de XCode y el SDK de IOS6. Así es como lo resolví:

Seleccione el archivo del generador de interfaces (ya sea xib o archivo de guión gráfico) donde se produce el error. En el editor asistente a la derecha en XCode, seleccione la primera pestaña de la izquierda, y hay una casilla de verificación para la opción "Usar diseño automático" como en la captura de pantalla anterior. Desmarque la casilla de verificación.

Dejan Balaban
fuente
4

Nagaraja pregunta "¿Cómo resolver lo mismo si no estamos usando xib? Me encontré exactamente con este problema. Creé un controlador con un xib, y luego decidí eliminar el archivo xib. El bloqueo no desapareció. El problema era que necesitaba implementar

- (void) loadView

en mi clase de controlador. Una vez que implementé este método, el problema se resolvió.

DDRider62
fuente
1

Otra posible razón para un bloqueo con presentViewController es tener algo en la punta conectado a una variable que ya no está allí: la variable tiene su nombre cambiado o se eliminó.

Chris Walken
fuente