Estoy usando XCode6 beta y probando Swift. Cuando coloco algunas restricciones de diseño automático en un controlador de vista, la aplicación se bloquea con el siguiente error:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
81
Respuestas:
Recibes este error porque estableciste una restricción para un IBOutlet que se elimina en tiempo de ejecución. Esto sucede cuando establece la restricción para que sea un marcador de posición en Interface Builder. Dado que se elimina la restricción, cuando va a desarchivarla, arroja un error que indica que no puede hacerlo.
Hay dos formas de corregir esto.
Método 1
placeholder="YES"
.Método 2
Así es como debería verse:
Alternativa
Suponiendo que realmente desea que la restricción sea un marcador de posición, deberá eliminar cualquier toma de referencia. Para hacer esto, seleccione la restricción que desea que sea un marcador de posición. Luego abra el inspector de conexiones (el botón más a la derecha que se ve así: (->)) y luego elimine las salidas de referencia que puedan existir en esa restricción.
fuente
Tuve el mismo problema en este momento y lo siguiente funcionó para mí.
Lancé una versión funcional de mi aplicación en la App Store, volví a trabajar en ella unos días después, tocando una de mis pestañas en UITabBarController y se bloqueó con el error:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
No tenía restricciones de diseño de marcador de posición que conociera ni salidas de restricciones que no deberían haberse definido.
La solución para mí fue simplemente desactivar las clases de tamaño y mantener los datos de la clase de tamaño para iPhone (la aplicación es solo para iPhone). Esto debe haber eliminado todo lo que me había perdido en las clases de tamaño. Quiero clases de tamaño, así que las volví a activar y la aplicación volvió a funcionar.
fuente
Esto podría no ser necesariamente un problema de restricción. Para mí, fue causado por no haber marcado "Instalado" para una clase de tamaño que se aplicaba a mi diseño, consulte aquí
fuente
Hubo algún problema con el uso de clases de tamaño. Desactivé esa opción de las propiedades del guión gráfico y uso solo el diseño automático. No fue un gran problema ya que la aplicación es solo para iPhone.
fuente
Lo que terminó sucediéndome fue que corté una subvista dentro de Interface Builder para copiarla en otro xib. Esto dejó la subvista en el constructor de interfaz xib original con atenuación. Después de eliminar la subvista de su lugar original (seleccionando y eliminando). Pude deshacerme del error.
fuente
Hay una opción en la ventana del inspector cuando selecciona el archivo xib que no usará las restricciones en "Mostrar archivo el inspector" en el inspector llamado "Usar diseño automático".
fuente
Hice un cambio en una vista de desplazamiento para que permitiera que los controles del selector incrustados en ella funcionen correctamente usando una solución que encontré en otra parte de Stackoverflow. Mi nuevo guión gráfico simplemente agregó estos atributos a la vista de desplazamiento, lo que me pareció bien.
delaysContentTouches="NO" canCancelContentTouches="NO"
Pero además, vi en mi storyboard en otra escena el siguiente fragmento nuevo:
<variation key="default"> <mask key="subviews"> <exclude reference="86H-aM-wei"/> </mask> </variation>
No tengo idea de dónde vino. Al principio lo ignoré porque todo parecía funcionar en mi máquina de desarrollo. Pero cuando la compilación se construyó como Release y se probó, me bloqueé. La eliminación de ese fragmento espurio (?) Solucionó el bloqueo y no pareció afectar nada más.
fuente
Tuve este problema cuando tenía un botón en una UICollectionViewCell personalizada y tenía algunas de sus restricciones como IBOutlets en esa clase. Moví el botón de la celda al controlador de vista principal y los IBOutlets todavía estaban referenciados en la celda, pero en realidad no existían en la celda, por lo que todo explotó. ¡Solo necesitaba eliminar esos IBOutlets y todo funcionó bien nuevamente!
fuente