linea features compilador cocoa cocoa-touch xcode interface-builder

cocoa - features - Error de "clase desconocida<MyClass> en el archivo Interface Builder" en el tiempo de ejecuciĆ³n



xcode windows (30)

A pesar del error " Clase desconocida MyClass en el Generador de Interfaz " impreso en tiempo de ejecución, este problema no tiene nada que ver con el Generador de Interfaz, sino con el vinculador, que no está vinculando una clase porque ningún código lo usa directamente.

Cuando los datos de .nib (compilados desde .xib) se cargan en tiempo de ejecución, se hace referencia a MyClass mediante una cadena, pero el vinculador no analiza la funcionalidad del código, solo la existencia del código, por lo que no lo sabe. Como ningún otro archivo de origen hace referencia a esa clase, el vinculador lo optimiza para que no esté en existencia al hacer el ejecutable. Entonces, cuando el código de Apple intenta cargar una clase de este tipo, no puede encontrar el código asociado e imprime la advertencia.

De forma predeterminada, los objetivos de Objective-C tendrán establecidos -all_load -ObjC , que mantendrán todos los símbolos. Pero había comenzado con un objetivo de C ++, y no tenía eso. Sin embargo, encontré una forma de evitar esto, lo que mantiene al enlazador agresivo.

El hack que estaba usando originalmente era para agregar una rutina estática vacía como:

+(void)_keepAtLinkTime;

que no hace nada, pero que llamaría una vez, como por ejemplo:

int main( int argc, char** argv ) { [MyClass _keepAtLinkTime]; // Your code. }

Esto obligaría al enlazador a mantener a toda la clase, y el error desaparecerá.

Como jlstrecker señaló en los comentarios, realmente no necesitamos agregar un método _keepAtLinkTime . Simplemente llamando a uno existente, tal como:

[MyClass class];

hace el truco (siempre que se derive de un NSObject ).

Por supuesto, puede llamar a esto en cualquier ubicación de su código. Supongo que incluso podría estar en código inalcanzable. La idea es engañar al enlazador para que piense que MyClass se usa en algún lugar, de modo que no sea tan agresivo para optimizarlo.

Xcode 6.3.2 y Swift 1.2

Rápida definición de vista. Asegúrese de anular init(coder aDecoder: NSCoder) . Definición de Objective-C de controlador de vista. Y, una semilla en un peral.

Agregue el Nombre del Módulo al inspector de detalles de Nib donde elija su clase.

A pesar de que Interface Builder es consciente de un MyClass , recibo un error al iniciar la aplicación.

Esto sucede cuando MyClass es parte de una biblioteca y no ocurre si compilo la clase directamente en el destino de la aplicación.


A veces IBuilder 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">



Arreglé esto copiando el texto de mi clase.h y .m, borrando esos archivos de clase del proyecto y creando nuevos archivos de clase.h y .m con el mismo nombre usando "Agregar archivo". Luego volví a pegar el código en los nuevos archivos y todo funcionó muy bien. De alguna manera, los archivos no se vincularon correctamente cuando se crearon. No tuve que usar ningún indicador de vinculador después de eso.


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 recibiera el error que mencionó.


En mi caso fue porque declaré una subclase de una subclase de una celda UITableView en el archivo .h (la declaración de ambas subclases estaba en el mismo archivo .h), pero olvidé hacer una implementación vacía de esa segunda subclase en el archivo .m.

¡No olvide implementar cualquier subclase de una subclase que declare en el archivo .h! suena simple, pero fácil de olvidar porque Xcode lo hará por usted si está trabajando con una clase por archivo .h / .m.


En mi caso, ¡estaba mostrando un error para una clase que ni siquiera existía! Sospeché que era algo que se borró en el archivo del guión gráfico. Si no reconoce el archivo de clase en el error, intente esto:

1) Abre tu proyecto en sublime u otro buen editor. Busque la clase a la que se hace referencia. 2) quitar todo el bit que dice

customClass="UnrecognizedClassName"

3) Guárdalo. 4) vuelva a xcode y limpie el proyecto, e intente ejecutarlo ahora.

trabajó para mi.


En mi caso, había eliminado una clase llamada "viewController" sin darme cuenta de que había sido seleccionada por el inspector de identidad del guión gráfico (debajo de "Clase personalizada" en la parte superior).

Solo tiene que seleccionar la clase correcta para el controlador de vista en el campo Clase personalizada de su inspector de identidad o agregar una nueva clase a su proyecto y seleccionar esa como su Clase personalizada.

¡Trabajó para mi!


En mi caso, recibí este error porque intenté ahorrar algo de trabajo creando un nuevo proyecto y luego eliminando varios de los archivos de origen y copiando los archivos de origen del mismo nombre del proyecto de trabajo. También copié mi archivo MainStoryBoard que estaba buscando mi RootViewController. Sin embargo, cuando eliminé el RootViewController original y luego lo agregué en el RootViewController del producto anterior, evidentemente, la operación Agregar archivos no pudo "verificar" el cuadro de destino como se sugirió anteriormente. Simplemente visitando todos los archivos ".m" recién importados y asegurándose de que la casilla de membresía de destino estuviera marcada, todo estaba bien. Creo que lo que estaba sucediendo era que el archivo del guión gráfico estaba buscando una clase que había sido "excluida" del enlace porque la membresía de destino no estaba seleccionada. Asegurarse de que los archivos necesarios para el destino estén designados de manera tal que la membresía objetivo en el inspector de archivos hizo el truco. Gracias Pat! (véase más arriba)


En mi caso, tengo XCode6, el archivo de clase .m especificada termina en el lugar equivocado en la fase de compilación. Debería haber estado en Fuentes de compilación , pero terminó en el


Es un problema de caché de Xcode4, simplemente elimine todas las carpetas en / Usuarios / su_usuario / Biblioteca / Soporte de aplicaciones / iPhone Simulator / 4.3 / Aplicaciones /

Además, si tiene el mismo problema con las pruebas en su iPhone, elimine la aplicación anterior antes de ejecutarla ...

Buena suerte. Pascual


Este problema no parece quedar desactualizado.

Tuve el mismo problema con Xcode 8 y lo resolví de forma similar a smilebot :

  1. Abra su archivo de guión gráfico como "Código fuente" dentro de Xcode:

  2. Busque la clase a la que se hace referencia y elimine todo el bit que dice

customClass = "UnrecognizedClassName"

  1. Abra su archivo de guión gráfico como "interfacebuilder - guión gráfico" de nuevo y reconstruya su aplicación.

Esto me volvió loco un poco y ninguna de las sugerencias anteriores me ayudó a deshacerme del error. Afortunadamente, solo tuve un objeto IB usando la clase, así que lo eliminé y lo volví a agregar con la misma clase especificada. El error se fue ...


Esto realmente no tiene nada que ver con Interface Builder, lo que está sucediendo aquí es que Xcode no está cargando los símbolos desde su biblioteca estática. Para resolver este problema, debe agregar los -all_load -ObjC los -all_load -ObjC la -all_load -ObjC del proyecto (y posiblemente el destino).

Como Objective-C solo genera un símbolo por clase, debemos forzar al vinculador a cargar también a los miembros de la clase mediante el uso del indicador -ObjC, y también debemos forzar la inclusión de todos nuestros objetos desde nuestra biblioteca estática agregando el enlazador -all_load bandera. Si omite estos indicadores, tarde o temprano, se encontrará con el error de un unrecognized selector u obtendrá otras excepciones, como la que ha observado aquí.


Esto sucede porque el .xib tiene un enlace antiguo al antiguo delegado de la aplicación que ya no existe. Lo arreglé así:

  • Haga clic derecho en el .xib y seleccione Abrir como> Código fuente
  • En este archivo, busque el antiguo delegado de la aplicación y reemplácelo con el nuevo

FINALMENTE solucioné esto, había olvidado agregar el siguiente código a mi archivo .m:

@implementation MyTableViewCell @end

Por lo tanto, se produjo porque había creado un marcador de posición @interfaz para mi celda de la tabla, que tenía una conexión con un elemento en el archivo .xib, pero hay un error en Interface Builder donde si no se especifica @implementation para una clase, no puede encontrarlo

Había seguido todos los pasos de otros foros para ver el .xib como fuente y ver MyTableViewCell a pesar de que lo había comentado fuera de mi código. Había intentado reiniciar el simulador. Incluso intenté dividir todas mis clases en archivos separados con el mismo nombre que las interfaces, pero nada funcionó hasta este momento.

En mi experiencia, no importa si los nombres de los archivos .h / .m son diferentes de los nombres de la interfaz @. Tengo varios archivos que contienen más de una interfaz @ y funcionan bien.

PPS Tengo una explicación más detallada de por qué UITableViewCell y UICollectionViewCell causan este error en https://.com/a/22797318/539149 junto con cómo revelarlo en tiempo de compilación usando registerClass: forCellWithReuseIdentifier :.


Intenté esto y otras respuestas que figuran en este sitio, ninguna de las cuales lo resolvió para mí. Estos comentarios (de http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html ) ayudaron a:

Después de buscar y buscar y buscar, finalmente descubrí el nombre de esta clase eliminada oculta en un archivo. Tuve que abrir los archivos del generador de interfaces en X-code, haciendo clic derecho sobre ellos y seleccionando ''ver como código fuente''. Entonces buscándolo surgió con

<object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> <string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string> <string>*this was the class name*</string>

Lamentablemente, eliminar la última línea no lo soluciona, y se queja de que hay un número incorrecto de elementos en el archivo. Debe eliminar la línea correspondiente en la sección de líneas sobre ella, que se refiere a CustomClass .


La mejor manera de eliminar el error es: 1) Seleccione el archivo de clase (.m) 2) En " Membresía de destino ", "marque" la entrada del nombre del proyecto


Me encontré con este problema hoy usando Swift.

Cambié una clase Model.h + Model.m a un Model.swift . Este objeto se usó en Interface Builder con la class = Model .

Tan pronto como reemplacé el objeto, la clase ya no podía cargarse.

Lo que tenía que hacer era cambiar la referencia de clase en IB desde:

Class = Model Module =

a

Class = Model Module = <TARGETNAME>

Encontrarás <TARGETNAME> en la configuración de compilación. También es el nombre que aparece en su encabezado Swift generado: #import "TARGETNAME-Swift.h"


Me encontré con esto en Swift.

Mover el archivo .xib a la carpeta Base.lproj del proyecto eliminó este error.


Mi caso: al intentar usar una Clase de un marco veloz en mi proyecto objetivo c, recibí este error. La solución fue agregar el Módulo (swift framework) de la clase en Interface builder / Storyboard como se muestra a continuación. Nada más



Simplemente elimine MyClass.m y .h y agréguelos al proyecto de nuevo. Es un trabajo para mí.


Solo quiero agregar esta respuesta ya que la mayoría, si no todas las respuestas aquí, asumen que la clase realmente existe ... es solo que el enlazador / compilador es demasiado tonto para verlo ... por lo tanto, las respuestas giran en torno a alertar al enlazador de la existencia. De la clase o creando un hack para ''forzar'' lo existe ..

mi problema ocurre cuando este mensaje realmente habla de una clase inexistente ... por lo que un ejemplo sería volver a una revisión de git anterior que no tiene conocimiento de cierta clase ... pero el compilador se queja de que dicha clase no lo hace t existen ..

¿solución?

  • Nuke todo! primero elimine todos los archivos de compilación, etc., eliminando todos los contenidos en este directorio ~ / Library / Developer / Xcode / DerivedData
  • elimine la aplicación del propio teléfono (y borre el contenido del simulador si está usando un simulador)

deberias ser bueno para ir despues de eso


Tenía "clase desconocida RateView en Interface Builder" donde RateView era una subclase de UIView. Había dejado caer una vista UIView en mi escena del Guión gráfico y había cambiado el campo Clase personalizada a RateView. Aún así, este error apareció.

Para depurar, cambié el nombre de mi clase a RateView2 y cambié todas las referencias para que coincidieran, excepto el campo de clase Personalizado de UIView. El mensaje de error todavía aparecía como antes con RateView como la clase faltante. Esto confirmó que el mensaje de error estaba relacionado con el valor del campo Clase personalizada. Cambié este valor a RateView2 y el mensaje de error cambió a "Clase desconocida RateView2 en Interface Builder". El progreso de los géneros.

Finalmente, inspeccioné los archivos de código fuente en el inspector de archivos. Allí descubrí que el archivo de código fuente (que había copiado de un tutorial) no estaba asociado con mi destino. En otras palabras, no tenía membresía objetivo. Marqué la casilla que hizo que el archivo de código fuente de la clase fuera miembro de la aplicación de destino y el mensaje de error desapareció.


Tenía el ''Botón de favoritos de la clase desconocida en el archivo de Interface Builder'' y lo localicé en una escena de libro de cuentos en la que el botón en cuestión tenía una clase personalizada falsa de "Botones de favoritos" en el campo Clase en la parte superior del Inspector de identidad. Quería poner ese valor en el siguiente campo: Etiqueta de identidad.

Cambiar esto a "UIButton" solucionó el problema.


Tuve un error hoy cuando convertí mi aplicación aaLuminate a Universal bajo Xcode 4. Esta aplicación se basa en la plantilla de utilidad y fue construida originalmente bajo Xcode 3.

Para ahorrar tiempo, copié las Vistas principal y de iPhone en los nombres apropiados de la aplicación Universal. Experimenté el error "Clase desconocida x en el archivo de Interface Builder". En mi caso no era nada en los archivos XIB o objetivos.

También había copiado el archivo aaLuminate-Info.plist por otras razones: esto tenía una clave antigua "Nombre de la base del archivo de la plumilla principal" establecida en MainWindow.

¡Tan pronto como borré esta clave se solucionó el problema!


Vaya a "ProjectName", haga clic en él y luego vaya a la pestaña "Fases de construcción", luego haga clic en "compilar fuentes" y luego haga clic en el botón "+", aparecerá una ventana, elija "MyClass". m "archivo y luego haga clic en" agregar ",

Construye el proyecto y ejecútalo, el problema seguramente se resolverá


Vaya a Construir fases-> Compilar fuentes y agregue sus nuevos archivos .m.


simplemente agregue el código a continuación al inicio del método appdelegate applicationindidfinishlanching, entonces funcionará bien

[clase de myclass];