ios - Xcode 6 Bug: clase desconocida en el archivo Interface Builder
xcode6 interface-builder (30)
Actualicé a Xcode 6 beta 4 y ahora mi aplicación falla continuamente con el mensaje
Clase desconocida X en el archivo Interface Builder.
Se bloquea porque supuestamente Xcode no puede encontrar mis clases personalizadas que he vinculado en mi Storyboard pero muestra que están vinculadas correctamente en la interfaz de Xcode.
Estoy seguro de que todo está vinculado correctamente. Mi única otra opción es eliminar todo el archivo del guión gráfico y empezar de cero porque puede estar dañado de alguna manera.
Edición: También me gustaría agregar que intenté limpiar, reiniciar el simulador, jugar con las fases de compilación, etc. Nada de eso funciona.
A veces, Xcode pierde customModule="AppName" customModuleProvider="target"
Para solucionarlo, abra el guión gráfico como código fuente y reemplace esta línea:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
a esto:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
A veces, el controlador que está proporcionando pierde su membresía de destino de la aplicación actual. En ese caso, presionar enter en el campo "Módulo" no hará nada. Vaya al controlador y asegúrese de que tiene la membresía de destino establecida en la aplicación actual.
Arreglé esto de acuerdo con lo que Laura sugirió, pero no tuve que volver a crear los archivos.
Usando XCode 4, en el Project Navigator, seleccione el archivo .m que contiene la clase de la que se queja.
Vaya a Ver-> Utilidades-> Mostrar inspector de archivos (esto mostrará el inspector de archivos a la derecha, con esa información de archivo .m)
Abra la sección de membresía de destino y asegúrese de que su destino esté seleccionado para este archivo .m
Cuando agregué mi archivo .m a mi proyecto, no lo agregué a mi destino predeterminado por alguna razón y eso provocó que obtuviera el error que mencionó.
Busqué en Google por todas partes para esto. Ninguna de las respuestas funcionó para mí hasta que conocí a 1 amigo que me pidió que moviera la carpeta de mi proyecto al escritorio. Simplemente funcionó automáticamente. Aparentemente, si tiene su carpeta de proyecto a la profundidad de muchas carpetas, XCODE realmente se rompe.
Compruebe si su clase tiene derecho de membresía de destino .
En mi caso, la clase a la que se hace referencia en el Guión gráfico / xib no tenía un conjunto de miembros de destino .
Para solucionarlo, .m
archivos .h
y .m
esa clase la misma Membresía de destino que sus otras clases.
Enfrenté el problema cuando porté el guión gráfico del proyecto Swift al proyecto Objective-c, notando la respuesta de vvkuznetsov , resultó que los dos proyectos usaban el mismo identificador. Presione "Producto -> Limpiar" y presione la tecla Intro en el campo de texto Módulo y Clase. el problema se fue
Enfrenté este problema en Xcode 8 , para resolverlo tuve que modificar el guión gráfico en el editor de texto.
En general, busque su control y elimine customModule
y customModuleProvider
de la entidad de control.
Hizo un truco para mí.
Esto funcionó para mí ..
Verifique su fuente compilada, si ese archivo (por ejemplo, ViewController.m) está agregado o no, en mi caso, el archivo ViewController no fue agregado por lo que me estaba dando el error ...
Esto puede suceder en cualquier Xcode por encima de 6.0. Me pasó después de cambiar el nombre de algunas clases de ViewController en el proyecto Swift (pero creo que también ocurrirá con Obj-C). Solo tiene que abrir el generador de interfaces, ir a Identity Inspector de ViewController cuyo nombre ha cambiado, seleccione class y presione Enter. Eso reasignará la clase renombrada al ViewController seleccionado y también restablecerá el Valor del módulo que se pierde después de renombrar la clase.
Actualización para Xcode 8.1 (probablemente 8.0 también):
Xcode 8.1 simplemente se bloquea. Simplemente y molesto simplemente se bloquea y no imprime nada. Perseguí ese choque fantasma durante una hora solo para descubrir que era exactamente lo mismo: una clase no asignada en el IB. Si está teniendo algunos accidentes fantasmas, primero verifique dos veces las clases no asignadas en IB.
Estos pasos me funcionan.
1) Borrar datos derivados.
2) Eliminar archivos .h y .m
3) Crear archivos .h y .m otra vez
La solución fue diferente para mí. Debe agregar el .m de la clase a los orígenes compilados de la fase de compilación del destino.
¡Espero que esto ayude!
Lo arreglé haciendo exactamente lo contrario a lo que sugirió ChikabuZ (aunque gracias por señalarlo). En el archivo del guión gráfico, encuentra esto:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
y reemplazarlo con esto:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">
No puedo creer la cantidad de horas que estoy perdiendo por los errores en el compilador Swift y Xcode 6
Lo que dice @gfrs es correcto, debe configurar el módulo. Sin embargo, una vez me topé con un problema que mi clase no estaba en la lista desplegable de Class
. Finalmente, eliminé el archivo swift, reinicié Xcode y volví a crear el archivo. Finalmente la clase fue listada y podría ser usada en el Storyboard.
También revise esta respuesta , que parece resolver el problema "real" que encontré.
Lo que solo funcionó para mí es agregar el nombre del módulo al archivo xib ...
Así que, los archivos xib se ven así:
mymodule.MyViewController.xib (Module being the name of the proyect, usually)
Una solución HORRIBLE en mi opinión, pero supuestamente así es como Apple quiere que lo hagamos ahora.
Esta pregunta muestra 3 posibles alternativas de trabajo en la versión beta 4 ... al parecer, Apple no ha sido muy útil en esta situación, según algunos, porque lo llaman "Trabajar como se esperaba".
Mi respuesta: establezca un módulo personalizado igual al nombre del Pod personalizado (en mi ejemplo, nombre de clase personalizado) como en la captura de pantalla adjunta
Esta solución es para un caso específico : para clases de vistas personalizadas desde el marco Pod (o Cartago ).
Infraestructura: XCode8, Swift3
Mi solución (Xcode 8.1 Swift 3.0):
Clase desconocida xxx en el archivo Interface Builder.
Abra StoryBoard como código fuente y busque xxx . Eliminar atributo que contiene valor xxx . Construir y ejecutar.
Mi solución fue eliminar @objc de la definición de la clase personalizada.
Resolví este problema al escribir el nombre del Módulo (desafortunadamente, la lista desplegable no mostrará nada ...) en la Clase personalizada del inspector de identidad para todas las vistas y el controlador de Vista.
También puede ser necesario indicar el proveedor de destino. Para lograr este objetivo, puede abrir el guión gráfico en el modo de código fuente y agregar el atributo "customModuleProvider" en ViewController y View Angular paréntesis.
Resolví este problema mientras escribía la pregunta. Pensé que respondería a mi pregunta y la dejaría aquí para cualquier otra persona que pueda enfrentar este problema al usar Xcode 6 beta 4.
Para resolver este problema, debe seleccionar cada uno de sus objetos de clase personalizados en Storyboard (esto incluye cualquier vista personalizada, incluso los controladores de vista personalizados).
Luego, con los objetos seleccionados, abra el inspector de identidad y en "Clase personalizada" debería ver la opción Módulo. Haga clic dentro del cuadro de texto Módulo y presione Entrar.
¡Eso es! El módulo actual para todos mis objetos personalizados debe haberse configurado internamente incorrectamente de alguna manera en Xcode 6 beta 4. Pero no había ninguna indicación visual de esto en el inspector.
Tenga en cuenta que si presionar Entrar dentro del cuadro de texto Módulo no funciona, intente seleccionar la flecha a la derecha y seleccione manualmente su módulo actual, luego borre el cuadro de texto y presione Entrar. También puede intentar presionar Intro dentro del cuadro de texto de la clase (aunque esto generalmente es para resolver un problema diferente).
Aquí hay una imagen para aclarar las cosas:
Resolví esto abriendo mi archivo de guión gráfico como código fuente y usando el comando F para buscar mi clase desconocida y eliminar la clase personalizada asociada a él.
Seleccione su archivo de clase desconocida, abra la pestaña del inspector de archivos, verifique su nombre de Target Membership
en la Target Membership
. Hay que ir
Tuve el mismo problema con Xcode versión 6.1 (6A1052d). Creo que el problema aparece si cambia el nombre de su aplicación / proyecto Xcode.
Mi solución fue agregar el nombre del módulo en el generador de interfaces manualmente.
Tuve este problema después de agregar un nuevo objetivo, luego creé una nueva clase usando el cuadro de diálogo ''Nuevo archivo'', pero accidentalmente no pude verificar el nuevo objetivo ni el objetivo original en el cuadro de diálogo de creación, por lo que el objeto solo se agregó a mi objetivo original. La solución fue eliminar los archivos de origen (eliminar solo la referencia) y luego volver a agregarlos usando ''Agregar archivos'', esta vez verificando ambos objetivos.
Tuve este problema después de cambiar el nombre de una clase rápida. Resuelto usando la directiva @objc:
@objc(ForumTopicListViewController) class ForumTopicListViewController
Main.storyboard
este problema en Xcode 6.1 cuando Main.storyboard
, el archivo LaunchScreen.xib
y las clases de ViewController
predeterminadas de mi proyecto.
Lo arreglé eliminando las entradas del Info.plist
de la Info.plist
de Info.plist
y Main Interface
de Info.plist