Error de "Clase desconocida en el archivo del creador de interfaces" en tiempo de ejecución


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 sucede si compilo la clase directamente en el destino de la aplicación.

Author: jhoule , 2009-11-13

30 answers

A pesar de la " Clase desconocida MyClass en el archivo de Interfaz Builder." error impreso en tiempo de ejecución, este problema no tiene nada que ver con el creador de interfaces, sino con el enlazador, que no vincula una clase porque ningún código la usa directamente.

Cuando el .datos nib (compilados de la.xib) se carga en tiempo de ejecución, MyClass se hace referencia usando una cadena, pero el enlazador no analiza la funcionalidad del código, solo la existencia del código, por lo que no lo sabe. Dado que no hay otros archivos fuente hace referencia a esa clase, el enlazador la optimiza fuera de existencia al hacer el ejecutable. Así que cuando el código de Apple intenta cargar tal clase, no puede encontrar el código asociado con ella, e imprime la advertencia.

Por defecto, los objetivos de Objective-C tendrán banderas -all_load -ObjC establecidas por defecto, 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 manera de evitar esto, lo que mantiene al enlazador agresivo.

El hack que yo era originalmente se usaba para agregar una rutina estática vacía como:

+(void)_keepAtLinkTime;

Que no hace nada, sino que yo llamaría una vez, tales como: {[12]]}

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

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

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

   [MyClass class];

Hace el truco (siempre y cuando se deriva 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 para que no sea tan agresivo al optimizarlo.

Xcode 6.3.2 & Swift 1.2

Definición rápida de la vista. Asegúrese de anular init(coder aDecoder: NSCoder). Objective-C definición del controlador de vista. Y, un plumín en un peral.

Agregue el Nombre del módulo al inspector de detalles de Nib donde elige su clase.

 217
Author: jhoule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-28 02:44:52

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

  • Usando XCode 4, en el Navegador de proyectos , seleccione el .m archivo que contiene la clase de la que se queja

  • Vaya a Ver - > Utilidades - > Mostrar el Inspector de archivos
    (esto mostrará el Inspector de archivos a la derecha, con eso .m-file info)

  • Abra la sección Membresía de destino y asegúrese de que su destino es seleccionado para esto .m-file

Cuando agregué mi.m archivo a mi proyecto, no lo agregó a mi destino predeterminado por alguna razón y eso me hizo obtener el error que mencionó.

 183
Author: Pat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-13 13:47:03

Esto realmente no tiene nada que ver con Interface Builder, lo que está sucediendo aquí es que los símbolos no se cargan desde su biblioteca estática por Xcode. Para resolver este problema, debe agregar las banderas -all_load -ObjC a la tecla Other Linker Flags la Configuración de Compilación del Proyecto (y posiblemente la del Destino).

Dado que Objective-C solo genera un símbolo por clase, debemos forzar al enlazador a cargar los miembros de la clase también usando la bandera-ObjC, y también debemos forzar la inclusión de todos nuestros objetos de nuestra biblioteca estática mediante la adición de la bandera enlazador -all_load. Si omites estas banderas tarde o temprano te encontrarás con el error de unrecognized selector u obtendrás otras excepciones como la que has observado aquí.

 65
Author: Alasdair Allan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-15 09:35:40

Me encontré con este problema hoy usando Swift.

Cambié una clase Model.h + Model.m a una Model.swift. Este objeto fue utilizado en el Constructor de interfaces con el class = Model.

Tan pronto como reemplacé el objeto, la clase ya no se pudo cargar.

Lo que tuve que hacer fue cambiar la referencia de clase en IB de:

Class = Model
Module = 

A

Class = Model
Module = <TARGETNAME>

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

 25
Author: Besi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-12 14:54:20

Vaya al "ProjectName" , haga clic en él , y luego vaya a la pestaña "Build phases", y luego haga clic en "compile sources" , y luego haga clic en el botón"+", aparecerá una ventana , el elija "MyClass.m "y luego haga clic en" agregar",

Construya el Proyecto y Ejecútelo , el problema seguramente se resolverá

 20
Author: Subbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-13 05:42:55

Es un problema de caché Xcode4, simplemente elimine todas las carpetas bajo / Users / your_user/Library / Application Support / iPhone Simulator / 4.3 / Applications /

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

Buena suerte. Pascual

 19
Author: Ignacio Pascual,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-28 00:49:16

A Veces IBuilder perdidas customModule="AppName" customModuleProvider="target"

Para arreglarlo, abra storyboard 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">
 16
Author: ChikabuZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-30 16:13:12

Vaya a Fases de compilación - > Compilar fuentes y agregue su nuevo.archivos m.

 13
Author: Jackie Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 17:07:10

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 guion gráfico. Si no reconoce el archivo de clase en el error, intente esto:

1) abre tu proyecto en sublime u otro buen editor. Buscar la clase a la que se hace referencia. 2) eliminar todo el bit que dice

customClass="UnrecognizedClassName"

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

Funcionó para mí.

introduzca la descripción de la imagen aquí

 13
Author: smileBot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-12 18:47:27

Mi caso: Al intentar usar una clase de un framework swift en mi proyecto objective c, obtuve 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

introduzca la descripción de la imagen aquí

 12
Author: Dhilip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-05 15:14:35

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 crear un hack para 'forzar' su existencia..

Mi problema ocurre cuando este mensaje realmente está hablando de una clase inexistente.. así que un ejemplo sería yo volviendo a una antigua revisión git que no tiene conocimiento de cierta clase.. sin embargo, el compilador se queja de que dicha clase no existe..

Solución?

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

Usted debe ser bueno para ir después de que

 9
Author: abbood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:17

La mejor manera de eliminar el error es: 1) Seleccione el Archivo de clase (.m) 2) En " Target Membership", "marque" la entrada del nombre del proyecto

 9
Author: Amit B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-04 10:35:34

Arreglé esto copiando el texto de mi clase.h y .m, borrando esos archivos de clase del proyecto, y creando una nueva clase.h y .m archivos con el mismo nombre usando "Add File". Luego pegué el código de nuevo en los nuevos archivos, y todo funcionó muy bien. De alguna manera los archivos no estaban enlazados correctamente cuando fueron creados. No necesitaba usar ninguna bandera de enlace después de eso.

 8
Author: Laura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-21 15:25:15

Finalmente arreglé esto, me había olvidado de agregar el siguiente código a mi .archivo m:

@implementation MyTableViewCell

@end

Así que estaba siendo causado porque había hecho un marcador de posición @interfaz para mi celda de tabla, que tenía una conexión a un elemento en el .xib, pero hay un error en Interface Builder donde si no se especifica ninguna implementación @para una clase, no puede encontrarla.

Había pasado por todos los pasos de otros foros de visualización de la.xib como fuente y viendo MyTableViewCell a pesar de que tenía lo comenté fuera de mi código. Había intentado restablecer el simulador. Incluso intenté dividir todas mis clases en archivos separados con el mismo nombre que las interfaces, pero nada funcionó hasta esto.

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

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

 7
Author: Zack Morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:01

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

  • Haga clic derecho sobre el .xib y seleccione Abrir como > Código fuente
  • En este archivo, busque el delegado de la aplicación anterior y reemplácelo por el nuevo
 6
Author: S B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-19 04:44:31

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

[clase myclass];

 6
Author: iSpark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 08:47:36

Probé esta y otras respuestas listadas en este sitio, ninguna de las cuales me las arregló. Este comentario (de http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html) helped:

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 de interface builder en código X, haciendo clic derecho sobre ellos y eligiendo 'ver como código fuente'. Entonces buscando que se le ocurrió

<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>

Simplemente eliminar esa última línea no lo soluciona desafortunadamente, quejándose de que hay un número incorrecto de elementos en el archivo. Es necesario eliminar la línea correspondiente en la sección de líneas por encima de ella, que se refiere a CustomClass.

 5
Author: user776904,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-30 23:46:02

En mi caso, tengo XCode6, la clase especificada .m archivo terminar en el lugar equivocado en la fase de compilación-Debería haber estado bajo Compile Sources, pero terminar en el Copiar Recursos del Paquete

 5
Author: Sean Dong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-31 21:10:35

Este problema no parece quedar obsoleto.

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

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

  2. Buscar la clase a la que se hace referencia y eliminar todo el bit que dice

CustomClass= "UnrecognizedClassName"

  1. Abra su archivo de storyboard como "interfacebuilder-storyboard" de nuevo y reconstruye tu aplicación.
 4
Author: jaymgee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:41

No solo en la configuración del proyecto, sino también en la configuración de destino, u tiene que agregar las banderas-all_load-ObjC..

Core-Plot: Unknown class CPLayerHostingView in Interface Builder file

 3
Author: S.P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:03

Simplemente elimine el MyClass.m y .h y añadirlos al proyecto de nuevo es trabajo para mí.

 3
Author: yebw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-01 03:48:27

Tenía 'Unknown class favouritesButton in Interface Builder file' y lo rastreé hasta una escena de storybook donde el botón en cuestión tenía una clase personalizada falsa de "favouritesButton" en el campo de Clase en la parte superior del Inspector de Identidad. Quise poner ese valor en el siguiente campo: Etiqueta de identidad.

Cambiar esto a "UIButton" resolvió el problema.

 3
Author: Paul Finger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-11 22:51:00

Me encontré con esto en Swift.

Moviendo el .archivo xib en la Base del proyecto.la carpeta lproj se deshizo de este error.

 2
Author: jaime,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-14 03:35:23

Hoy tuve este error al convertir 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 Lateral del iPhone a través de los nombres apropiados en la aplicación Universal. Experimenté el error "Clase x desconocida en el archivo de Interfaz Builder". En mi caso no había nada en los archivos XIB ni en los objetivos.

También había copiado el aaLuminate-Info.plist file across para otras razones-esto tenía una vieja clave "Nombre base del archivo nib principal" establecida en MainWindow.

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

 1
Author: aarthur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-06 09:30:27

En mi caso recibí este error porque había intentado guardar algún 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 añadí al rootViewController del producto anterior, evidentemente la operación Add Files no pudo "marcar" la casilla de destino como se sugirió anteriormente. Simplemente visitando todo el newley importado ".m " archivos y asegurarse de que la casilla de membresía de destino estaba marcada, todo estaba bien. Creo que lo que estaba sucediendo era que el archivo del guion gráfico estaba buscando una clase que había sido "excluida" del enlace porque la membresía de destino no estaba marcada. Asegurarse de que los archivos necesarios para el destino están designados en la membresía de destino en el inspector de archivos hizo el truco. Gracias Pat! (véase supra)

 1
Author: Don,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-21 22:53:40

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 estaban en el mismo .h file), pero se olvidó de hacer una implementación vacía de esa segunda subclase en el .archivo m.

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

 1
Author: horseshoe7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-16 17:20:02

Tenía "Clase desconocida RateView en Interface Builder" donde RateView era una subclase de UIView. Había dejado caer un UIView en mi escena del guion gráfico y cambié el campo de clase personalizado a RateView. Sin embargo, 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 la UIView. El mensaje de error todavía apareció como antes con RateView como la clase faltante. Esto confirmó que el mensaje de error estaba relacionado al valor del campo Clase personalizada. Cambié este valor a RateView2 y el mensaje de error cambió a "Clase desconocida RateView2 en Interface Builder". Algún tipo de progreso.

Finalmente, inspeccioné los propios 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 Miembros Objetivo. He marcado la casilla que hizo el archivo de código fuente de la clase un miembro de la la aplicación de destino y el mensaje de error desaparecieron.

 1
Author: Robert White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-11 21:53:46

En mi caso, había eliminado una clase llamada "ViewController" sin darme cuenta de que fue seleccionada con el inspector de identidad del guion gráfico (en '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.

Funcionó para mí!

 1
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-30 00:23:23

Agregué el archivo en la fase de compilación en Targets y el problema se resolvió. Para los pasos para agregar el archivo, vea mi respuesta en:

Error del enlazador Mach-O de Apple (APActivityIcon)

 1
Author: Jamal Zafar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:23

Esto me volvió loco por un poco y ninguna de las sugerencias anteriores me ayudó a deshacerse del error. Afortunadamente solo tenía un objeto IB usando la clase, así que lo eliminé y lo agregué de nuevo con la misma clase especificada. El error desapareció...

 1
Author: Jdizzle Foshizzle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-10 16:21:29