[ios] Xcode 6 Error: clase desconocida en el archivo de Interface Builder


Answers

A veces Xcode se perdió 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">
Question

Actualicé a Xcode 6 beta 4 y ahora mi aplicación se cuelga continuamente con el mensaje

Clase desconocida X en el archivo de Interface Builder.

Se cuelga 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 puede ser eliminar todo el archivo del guión gráfico y comenzar de cero porque podría estar dañado de alguna manera.

Editar: También me gustaría añadir que traté de limpiar, reiniciar el simulador, jugar con las fases de construcción, etc. Nada de eso funciona.




Estos pasos funcionan para mí.

1) Borrar datos derivados.
2) Eliminar los archivos .h y .m
3) Crear archivos .h y .m nuevamente




Lo único que funcionó para mí es en realidad agregar el nombre del módulo al archivo xib ...

Entonces, los archivos xib se ven así:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

Solución HORRIBLE en mi opinión, pero supuestamente es como Apple quiere que lo hagamos ahora.

Esta pregunta muestra 3 posibles regresos en la versión beta 4 ... aparentemente, Apple no ha sido de mucha ayuda en esta situación, según algunos, porque lo llaman "Funcionando según lo previsto".




Seleccione su archivo de clase desconocido, abra la pestaña del inspector de archivos, verifique su nombre de Target Membership en Target Membership . Ahí tienes.




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 así como 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 sólo referencia) y luego agregarlos usando 'Agregar archivos', esta vez comprobando ambos objetivos.




En mi caso, la clase a la que se hace referencia en Storyboard / xib no tenía el conjunto de Membresía objetivo .

Para solucionarlo, proporcione a los archivos .h y .m esa clase la misma Membresía objetivo que sus otras clases.




Verifique si su clase tiene la Membresía Target correcta.




Me enfrenté al problema cuando porté el guión gráfico del proyecto Swift al proyecto Objective-c, noté la respuesta de vvkuznetsov y resultó que los dos proyectos usaban el mismo identificador. I "Producto -> Limpiar" y pulse la tecla Intro en el campo de texto Módulo y Clase. el problema desapareció




Lo arreglé haciendo exactamente lo contrario de lo que ChikabuZ sugirió (gracias por señalarlo, sin embargo). En el archivo del guión gráfico, encuentra esto:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

y reemplázalo con esto:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

No puedo creer la cantidad de horas que pierdo al encontrar errores en el compilador Swift y Xcode 6




Esto funcionó para mí ...

Verifique su fuente compilada, ya sea que ese archivo (por ejemplo, ViewController.m) se haya agregado o no, en mi caso no se agregó el archivo ViewController, por lo que me dio el error.




Busqué en Google en todas partes para esto. Ninguna de las respuestas funciona 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 tienes tu carpeta de proyectos en muchas carpetas, XCODE se rompe.




A veces, el controlador que está proporcionando pierde su membresía objetivo de la aplicación actual. En ese caso, presionar Enter en el campo "Módulo" no hará nada. Dirígete al controlador y asegúrate de que tenga una membresía objetivo establecida en la aplicación actual.




Arreglé esto en la línea de lo que sugirió Laura, pero no necesité recrear los archivos.

Usando XCode 4, en Project Navigator, seleccione el archivo .m que contiene la clase sobre 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 .m-file)

Abra la sección Membresía de destino y asegúrese de que su objetivo esté seleccionado para este archivo .m

Cuando agregué mi archivo .m a mi proyecto, no lo agregué a mi objetivo predeterminado por algún motivo y eso me provocó el error que mencionaste.




Proyecto con objetivos múltiples

En mi caso, estoy trabajando en Project with Multiple Targets y el problema fue "inherit from Target" (Herencia de Target) sin marcar. Seleccionar "heredar del objetivo" resolvió mi problema




Lo que @gfrs dijo es correcto, debe configurar el Módulo. Sin embargo, una vez me encontré con un problema de que mi clase no figuraba en el menú desplegable Class . Finalmente eliminé el archivo rápido, reinicié Xcode y volví a crear el archivo. Finalmente, la clase fue enumerada y podría ser utilizada en Storyboard.

También eche un vistazo a esta respuesta , que parece resolver el problema "real" que encontré.




Links