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

usuario2597451
fuente
¿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

Chris Harrison
fuente
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.

Andrew Robinson
fuente
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í

Ruud Visser
fuente
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!

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

Jesus Rodriguez
fuente
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í

Amr enojado
fuente
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.

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

Joe149
fuente
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.
yndolok
fuente
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ó!

Elliot KG
fuente
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.

Hayden Crabb
fuente
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.

Damo
fuente
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)

programador
fuente
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í

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

JohnVanDijk
fuente
2

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

Jangles
fuente
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!
usuario2480567
fuente
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.

inix
fuente
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.

Delimitador
fuente
1

Solo necesito limpiar y reconstruir el proyecto.

Carolina Aguilar
fuente
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ó!

John Nolan
fuente
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

Will Buffington
fuente
1

¡Lo intenté TODO!

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

Informe de error enviado.

Aaron Kreipe
fuente
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.

CaptJak
fuente
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.

jomafer
fuente
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.
}
José Roberto Abreu
fuente
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.

Nick DiZazzo
fuente
0

Solo intenta eliminar los datos derivados del proyecto

david.gol
fuente
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 
yousuke
fuente