"No se pudo encontrar ninguna información para la clase llamada ViewController"


154

Este error me ha vuelto loco desde que comencé a usar Xcode (4.6.3). Cada vez que intento vincular un elemento de Storyboard a mi código, aparece el error:

No se pudo encontrar ninguna información para la clase llamada ViewController.

Esto también sucede con las clases personalizadas. He probado métodos como:

  • Eliminar los datos delegados.
  • Eliminar y volver a agregar las clases.
  • Reiniciando Xcode.
  • Reinstalar Xcode.

No puedo presionar ctrl-drag para crear conexiones en ninguno de mis proyectos sin importar la clase. El mismo problema ocurre con una nueva aplicación de plantilla. Si escribo el código manualmente y luego presiono ctrl-drag, puedo establecer una conexión que funcione, pero no puedo agregarla automáticamente. Nada de lo que he podido encontrar hasta ahora en Internet me ha ayudado. Cualquier puntero?


¿Está triplemente seguro de que el archivo ViewController .m está incluido en el destino correcto? (casilla de verificación en el panel del inspector de la derecha)
Alfie Hanssen

2
Tiene un controlador de vista en su guión gráfico y especificó "ViewController" para el nombre de la clase que se debe instanciar para administrar la vista. Verifique cada controlador de vista en el guión gráfico: seleccione el controlador de vista, mire el "inspector de identidad" en el panel derecho y mire la propiedad "Clase personalizada". Si dice "ViewController", entonces ahí está tu problema. Ponga el nombre de la clase que debe administrar su controlador de vista ... o ponga UIViewController para obtener la implementación predeterminada de UIKit.
Nicholas Hart

1
Cambié la clase personalizada a "UIViewController" en el inspector de identidad, y ya no pude arrastrar ctrl del guión gráfico a ViewController.h. Si creo una nueva clase e intento presionar ctrl-arrastrarla (después de configurar la clase del controlador de vista en consecuencia), obtengo el mismo error "No se pudo encontrar ninguna información".
user2597451

44
Tuve este problema, y ​​la modificación de la clase ViewController generada automáticamente funcionó para mí. Por ejemplo, simplemente agregue un NSLog()toviewDidLoad:
jb

Respuestas:


292

Lo que resolvió este problema para mí fue en realidad eliminar la clase del proyecto.

Pasos:

  1. En el explorador de archivos del proyecto (panel izquierdo) encuentre la clase y haga clic derecho -> Eliminar
  2. Elimine la referencia (no se mueva a la basura ya que perderá la clase para siempre)
  3. Haga clic derecho en la carpeta que contenía la clase -> Agregar archivos a ...
  4. Encuentra la clase que acabas de eliminar en el sistema de archivos

Esto parece forzar a Xcode a vincular la clase nuevamente en el guión gráfico.

Nota: para mí lo siguiente no funcionó:

  • Cerrando Xcode
  • Limpieza del proyecto
  • Eliminar el nombre de la clase del guión gráfico y volver a ingresarlo

Creo que esto es un error por parte de Apple


8
Intenté esto, pero no funcionó para mí / -: mismo error.
Michael

1
@ Michael, sí, ahora estoy en una situación en la que nada de lo anterior funciona en absoluto. Xcode es un ***
Chris Harrison

55
Este problema se remonta a julio de 2013, a partir de hoy, mayo de 2016, recibo el mismo error y lo solucioné con esta respuesta. ¿Cómo es que en tantos años Apple no lo arregla para siempre?
SkyWalker

3
No puedo creer que esto siga siendo un problema. Solo tenía que hacer esto en XCode 8.1 ..
fisk

2
2017 (Versión 8.2 (8C38)) y aún vivo, Xcode SUCKS. Me sucede cuando copie y pegue al personal de la interfaz de usuario del guión gráfico de una escena a otra
Jaime Agudo

135

En caso de que alguien todavía esté frustrado por esto, hay un truco para que las cosas funcionen.

Lo que hago es ingresar manualmente una salida en mi clase, por ejemplo: @IBOutlet weak var someView: UIView!y arrastrar desde el código a la vista en IB o storyboard. Después de esto, puedo arrastrar desde IB / Storyboard a mi clase para hacer conexiones, los editores asistentes reconocen la clase en "Automático", etc.

Funciona todo el tiempo.


66
@ Gmeister4, si crea una salida en su código, muestra un pequeño círculo a la izquierda de la salida. Haga clic y arrastre desde ese círculo a la vista en IB o Storyboard para establecer su conexión.
Andrew Robinson

44
Más fácil que la respuesta principal. +1
cph2117

2
Todavía no puedo hacerlo de la manera correcta, ni siquiera después de esto, ¡pero al menos esto funciona!
Alexandre G

1
Ninguna de las respuestas anteriores funcionó para mí. Solo esta respuesta funcionó para mí.
coolcool1994

1
Impresionante, eso es todo!
Sam

38

Para mí, eliminarlos de su membresía objetivo en la columna derecha y agregarlos nuevamente fue el truco ingrese la descripción de la imagen aquí


Esto también funcionó de mí. Había duplicado la clase ViewController.swift, y esta parece ser la solución.
UberJames

Creo que es un error de Xcode que todavía existe en Xcode 8.0
jiangjiefs

Esto me sucedió ahora en Xcode 8.3.3 y su solución es la más simple y funciona. ¡¡¡Así que gracias!!!
RoberRM

Todavía existe en Xcode 11.5 (quiero decir, ¿en serio Apple?). La única solución que funcionó para mí aparece aquí.
Christophe Fondacci

12

En algún momento Xcode lo hace debido a que VC no hace referencia al archivo de clase. La solución simple para esto es:

escriba la propiedad manualmente como se indica.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Esto hará un signo de enlace vacío antes de @IBOutlet , abra su proyecto en el editor asistente, luego haga clic en el signo de enlace ingrese la descripción de la imagen aquíy arrastre a la Vista que desea conectar (me he conectado con TableView). y eso es. ¡Disfruta de Happy Coding!


8

Acabo de tener este problema en abril de 2017 con Xcode 8

Simplemente creando una salida a través del código y compilando lo arregló. p.ej:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Tienes que amar Xcode ...

Editar: sigue sucediendo en Xcode 9


7

los siguientes pasos funcionan para mí, espero que funcionen para usted también

1- Debe volver a abrir su proyecto después de cerrar Xcode.

2- Espere a indexar archivos de proyecto

3- Comprueba si funciona o no

4- Si aún no funciona, sigue el paso 5, si no te gusta :)

5- Limpia y construye el objetivo de tu proyecto

ingrese la descripción de la imagen aquí


7

Intenté todo y no funcionó, así que para mí lo que funcionó es:

  • Limpie la carpeta de compilación y el proyecto.
  • Proyectos abiertos (Ventana -> Proyectos)
  • Encuentre su proyecto en la lista y elimine los datos derivados
  • Cerrar Xcode
  • Reinicie la computadora (sin elegir volver a abrir las ventanas que están abiertas)
  • ejecutar Xcode
  • ¡Trabajo!

No se reconocían todos mis controladores de vista, por lo que eliminar todos los archivos y volver a agregarlos no era una opción, ya que este es un gran proyecto.


4

Para mí, lo siguiente funcionó:

  1. Haga una 'limpieza' y una 'carpeta de compilación limpia' (presione 'opción' en el menú Producto para obtener el comando 'limpiar carpeta de compilación'

  2. Detener Xcode

  3. En la terminal, vaya a la carpeta de datos derivados:

    (/ Users // Library / Developer / Xcode / DerivedData)

Elimine el directorio de datos derivados para su proyecto.

  1. Agita el pollo muerto en el aire

  2. Iniciar Xcode


3

Tuve que hacer una combinación de un par de respuestas hasta ahora:

  1. Elimine el nombre de la clase personalizada del guión gráfico.

(Haga clic en el botón amarillo en la parte superior izquierda del controlador de vista en el guión gráfico -> vaya al inspector de identidad (opción + comando + 3) -> elimine el nombre de la clase personalizada en la parte superior)

  1. Elimine la referencia al archivo del controlador de vista.

(Haga clic derecho en el archivo -> eliminar -> eliminar referencia)

  1. Agregue el archivo del controlador de vista nuevamente al proyecto.

(Haga clic derecho en la carpeta donde estaba el archivo -> "Agregar archivo a [proyecto]")

  1. Agregue el nombre de la clase personalizada nuevamente al guión gráfico.

3

Si la gente prueba lo anterior y las cosas aún no funcionan, el extraño truco que funcionó para mí fue agregar la salida en un espacio en blanco. Funciona si no hay otras líneas directamente encima o debajo de la línea que está agregando. ¡Extraño, pero funcionó!


3

Lo que funcionó para mí fue, en lugar de arrastrar la conexión desde el botón al código, fue:

  1. Al hacer clic en el elemento del guión gráfico deseado.
  2. Abrir el inspector de conexiones (panel derecho)
  3. Arrastrando desde el círculo + al área de código. Al igual que:

Después de vincular mi código de esta manera, funcionó normalmente a partir de entonces.


3

¡Mantente en el blanco!

Estaba agregando una nueva clase con una Xib y comencé a ver este problema y pasé un buen rato mirando las respuestas aquí y viendo si algo de eso marcaba la diferencia.

Como sucede, tengo múltiples objetivos en mi espacio de trabajo y, a menudo, tengo que cambiar entre ellos.

Resulta que agregar nuevos archivos iniciará una reindexación en Xcode. Pero si está apuntando al objetivo incorrecto, es probable que la indexación no tenga sentido y durante el arrastre para conectar Xcode no podrá encontrar su clase.

En breve

Paso 1.

Selección de objetivo

Asegúrese de tener el conjunto de objetivos correcto para que la indexación tenga sentido.


3

Esto funcionó para mí:

  1. Realice ' Limpiar carpeta de compilación '
    (presione y mantenga presionada la tecla 'opción' y vaya al " Producto menú " para acceder a ella.
  2. Realice una simple "Limpieza" (CMD-SHIFT-K) desde el " Producto menú ".
  3. Cree el proyecto para permitir que Xcode compile los archivos. Además, déjelo indexar archivos si es necesario.

En una nota al margen, no estoy seguro de si esto ayudó, pero también eliminé los datos derivados antes de realizar los pasos anteriores (Preferencias de Xcode> Ubicaciones)


2

Seleccione ViewController en storyBoard, elimine el valor actual en el panel derecho / "Clase de cliente" / "clase" y luego vuelva a agregar la clase de control (tipo: "SampleViewController" ...), ingrese. -> Eso funciona para mí


2

Intenté todas estas respuestas, el problema para mí estaba relacionado con que Xcode no podía indexar los archivos. Lo arreglé simplemente saliendo de Xcode y volviendo a abrir el proyecto. Por supuesto que lo hice después de probar todas las soluciones anteriores: p


2

Producto> Limpiar (Comando - Shift - K) lo arregló para mí!


2

Este es el paso MÁS FÁCIL que hice para solucionar este problema.

  1. Yo limpio el proyecto
  2. Arrastre un nuevo botón en el controlador de vista.
  3. Construye el proyecto.
  4. Conecte el botón recientemente arrastrado a la clase (ya sea salida o acción).
  5. Entonces voila !!! ¡Ahora se pueden conectar otras salidas a la clase nuevamente!

1

Como mi experiencia de prueba, si elimina una clase que estaba asociada en el Xcode, y luego agrega el archivo nuevamente, entonces se producirá este problema.


1

Por lo general, cuando esto me sucede, todavía no he guardado el código para la clase. Simplemente salte al código y presione cmd + s, y a menudo soluciona el problema de la manera correcta.



1

Ninguno de los pasos anteriores me funcionó, pero creo que descubrí el problema. Al menos es lo que funcionó para mí, y no es un error en Xcode.

Cuando esté en el editor asistente, mire la parte superior de la ventana que tiene el código para su viewController. La tercera opción de la derecha probablemente dice "Manual", pero debería decir "Automático". Una vez que cambié esto, ¡el problema se resolvió!


1

Estaba teniendo un problema similar, "No pude encontrar una clase llamada ..." y la causa fue estúpida de mi parte una vez que lo descubrí. Asegúrese de no arrastrar desde el elemento a la interfaz ; asegúrese de que se esté arrastrando a la clase misma


1

¡Lo intenté TODO!

Asegúrese de que el nombre de clase de su UIViewController no contenga la palabra "Prueba"

Informe de error enviado.


Definitivamente no digo que esta sea la única causa. Solo que esto es otra cosa a tener en cuenta.
Aaron Kreipe el

Ayuda para mí eliminar todos los datos derivados, proyecto limpio. Pero esto es un error y tienes razón.
Genevios

0

Intentaría rehacer los archivos .m y .h en cuestión y darles un nombre original, no genérico como "ViewController". Pruebe algo más en la línea de lo que desea que haga ese archivo y que termine en View Controller (es decir, "PizzaDecoraterViewController")

Luego seleccione el ViewController que desea conectar a esos archivos. Asegúrese de seleccionar el ViewController, no solo un objeto dentro. Haga clic en la barra negra en la parte inferior (la que tiene los iconos "Primer respondedor" y "Salir"). Todo el ViewController debería ser azul. Luego, vaya a la sección Clase personalizada en el Inspector de identidad y debería ver un "UIViewController" en gris en el primer campo. En ese campo, escriba el nombre del archivo .h o .m al que desea que se conecte (comience a escribir PizzaDecorator ... y debería hacer algo pequeño de autocompletar). Luego presiona ENTER.

Cuando abra el Editor Asistente, asegúrese de que el archivo al que está intentando arrastrar y soltar es, de hecho, el archivo correcto.

Si ha hecho todo como se dijo anteriormente, entonces debería funcionar.


Todavía no funciona, desafortunadamente. He intentado hacer esto antes en vano. Aquí hay una captura de pantalla: i.imgur.com/5ixtcps.png
user2597451

Huh Extraño. Intente agregarlos mediante programación (es decir, @property (nonatomic, strong) IBOutlet UIView * test;) y luego, cuando aparezca el pequeño círculo al lado, arrastre y suelte a su UIView.
CaptJak

Eso funciona y siempre funciona (y las aplicaciones parecen funcionar bien), pero estoy tratando de resolver el problema que no se agregará automáticamente.
user2597451

Bueno, si funciona así, entonces debería funcionar a la inversa. ¿Error en tu XCode? Intente obtener una versión anterior (como 4.6.2 o algo así) e instálela. De lo contrario, ummmmmmmmmmmmmmm ...... sí ....
CaptJak

Sí, eso es lo que me temo. Desinstalar y reinstalar no ha funcionado, esperaba cometer un error. ¿Cuál es la mejor manera de degradar mi copia de Xcode?
user2597451


0

Elimine los archivos (solo las referencias) y agregue los archivos nuevamente.


0

Bueno, en mi caso, lo que funcionó (es un poco raro, pero funcionó) es lo siguiente:

Intente agregar un origen de datos (por ejemplo, una extensión al ViewController como un UITableViewDataSource). Xcode intentará volver a cargar el ViewController. Luego escribí algún método del protocolo (al principio Xcode no completó automáticamente los métodos, pero lo escribí manualmente), luego agregué los IBOutlets y, por último, eliminé la fuente de datos.

Ejemplo:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

0

Para mí, la vista para la que había especificado una clase personalizada no estaba siendo compilada por el generador de interfaces. Fue marcado @IBDesignable.

Eliminando @IBDesignable, y luego agregando mis puntos de venta, y luego marcándolo como @IBDesignableresuelto el problema en mi caso.



0

solo prueba esto

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.