Xcode 4: creando un xib de UIView, no se conecta correctamente

84

Estoy tratando de crear una plumilla que contenga una vista que se incrustará en TableViewCell. Creé la interfaz y los archivos de implementación ResultCell.hy ResultCell.m. Están disponibles, listos para usar, sin cambios de código.

Luego creo un archivo XIB vacío y arrastro un UIView sobre él. Luego hago clic en Propietario del archivo y establezco el tipo en ResultCell. Hago clic en la vista y configuro su clase para que también sea ResultCell.

Estos son los problemas que tengo:

  1. Cuando utilizo la vista Editor asistente (en la que vivo), el ResultCell.harchivo no aparece cuando veo el archivo ResultCell.xib. Tengo que forzarlo a cargar haciendo clic en Automático y seleccionando el archivo.
  2. Cuando coloco una etiqueta en la vista, y luego Ctrl + clic y arrastro a .h para crear una salida, aparece este mensaje de error: " No se pudo insertar una nueva conexión de salida: no se pudo encontrar ninguna información sobre la clase llamada ResultCell. "

He intentado crear y volver a crear la vista, pero no funciona y he empezado a perder la paciencia. ¡Cualquier ayuda sería muy, muy apreciada!

Tim Sullivan
fuente
Me encontré con esto yo mismo. Anoche funcionó y hoy nada. Te avisaré si encuentro algo.
Tavison
Para que conste, varias respuestas aquí me han ayudado durante el último año. Las versiones recientes de Xcode han mejorado las cosas.
Tim Sullivan

Respuestas:

82

Es posible que esto no funcione para su problema específico, pero ocasionalmente obtengo ese error cuando trabajo con puntas recién creadas. Eliminar y volver a crear las puntas y los controladores de vista con los mismos nombres que antes no resolvió el problema, pero el reinicio de Xcode sí.

Desfragmentado
fuente
+1 también funcionó para mí. Simplemente reinicie XCode, y ahora puedo CTRL + Arrastrar para crear nuevas @propertys en mi archivo .h.
Mike Gledhill
1
La respuesta de David Pisoni funcionó para mí. Simplemente reiniciar Xcode no cortó la mostaza.
Andy
No he tenido este problema en muchas versiones de Xcode ahora, por lo que probablemente haya otra causa que sea más frecuente ahora que la que estaba experimentando cuando escribí esta respuesta el año pasado.
Desfragmentado
@Defragged puede también incluir el paso a borrar la memoria caché pulsando Control K Antes de citar o incluso mejor es dejar de Xcode a continuación, borrar la memoria caché ( ~/Library/Developer/Xcode/DerivedData)
user1046037
Estoy trabajando con Xamarin Studio. Tuve que salir de xcode y xamarin studio, luego volver a abrir Xamamrin Studio y abrir un archivo xib desde aquí que se lanzó en xcode. Entonces, el editor asistente se abrió correctamente.
Dave Haigh
113

Entré en un estado similar hoy. Era muy extraño: podía adjuntar cualquier XIB (nuevo o existente) a cualquier clase ViewController ya existente en el proyecto, pero no podía crear un nuevo ViewController y hacer que se adjuntara correctamente a cualquier XIB. La funcionalidad de "asistente" no funcionó, ni tampoco la funcionalidad de conexión de IB a archivo de encabezado.

Cerrar el proyecto y reabrirlo no lo solucionó.
Salir de XCode y reiniciar no lo solucionó.
Crear un nuevo proyecto y probar la funcionalidad funcionó bien, lo que me llevó a creer que había algo corrupto en algún caché en alguna parte.

Mi solución

  • Cierre su proyecto.
  • Vaya a la carpeta ~ / Library / Developer / XCode / DerivedData y ELIMINE todas las subcarpetas que hacen referencia al proyecto en el que está trabajando.
  • Abra su proyecto en XCode. El problema debería solucionarse ahora.

Por cierto, el simple hecho de realizar una limpieza completa no pareció aclarar las cosas. Tuve que tirar los datos derivados a la basura. Estoy seguro de que llegué a esta posición debido a los juegos de git que estaba jugando, pero no tenía idea de cómo salir, porque incluso volver a las revisiones de git anteriores no ayudó. (Esa fue una gran pista también de que era algo que el proyecto no había seguido).

David Pisoni
fuente
6
Acabo de iniciar sesión en SO en mi Mac, ¡solo para poder votar esta respuesta! Funcionó totalmente para mí. Esto me estaba volviendo loco, ya que recién estoy aprendiendo a usar XCode y ya es lo suficientemente difícil sin problemas ridículos como estos. :) ¡¡¡Gracias!!!
Dave
2
incluso funciona sin reiniciar xcode; simplemente borrando los datos derivados y reconstrucción (en un proyecto IOS)
Nob
Esto funcionó cuando reiniciar xcode no lo hizo. No tengo idea de cómo sucedió con el método de David Pisoni que funcionó muy bien.
mmopy
Increíble. Cómo lo supiste? Trabajó para mi.
ho
1
lol, es bueno saber que IOS y xcode pueden tener tantos errores, si no más, que usar eclipse y Android: p
James andresakis
14

Acabo de tener este problema y reiniciar Xcode no lo solucionó. Eliminé los archivos de clase del proyecto, luego los volví a agregar y comenzó a funcionar.

jasongregori
fuente
13

Tuve el mismo problema. Y lo intenté:

  • Reiniciar Xcode
  • Eliminar datos derivados
  • Y muchos más

Nada de eso funcionó. Lo que funcionó para mí fue simplemente:

  • Elimine los archivos de clase 'sospechosos' del proyecto (simplemente elimine las referencias, ¿eh?)
  • Vuelva a agregarlos al proyecto

¡Y hecho!

Dr. Kameleon
fuente
2
Esto funcionó para mí, ¡gracias! Fue lo primero que intenté, aparte de reiniciar XCode, ya que parecía la menor cantidad de trabajo y riesgo, y funcionó muy bien.
Adriandz
1
trabajado para mí después de reiniciar Xcode y borrar los datos derivados didnt
Elad s
1
Este también me sirvió. Esto puede tener algo que ver con la refactorización de los nombres de las clases (que es lo que hice antes).
ecotasa
9

Si reiniciar Xcode no funciona para usted, descubrí que alternar el nuevo archivo .m y volver a la membresía de destino funciona.

Campos de Duane
fuente
3

Esto me ayudó:

  1. en el Panel de archivos del proyecto (lado izquierdo), seleccione el archivo xib que está roto.
  2. Haga clic en el icono Propietario de archivos en la vista del editor.
  3. desde el Panel de propiedades (lado derecho) seleccione la tercera pestaña (en la parte superior)
  4. especificar la "Clase personalizada"

Si no ve un "panel", mire la esquina superior derecha de la ventana y habilite los botones de "vista" adecuados. Si no ve los botones "ver", haga clic en el botón de la cápsula situado más a la derecha.

Ivan Dossev
fuente
Recientemente había cambiado (refactorizado) el nombre de la clase. La clase personalizada como se menciona en esta respuesta todavía estaba configurada con el nombre anterior. Lo cambié por el nuevo nombre y está arreglado.
PaulMrG
2

Noté que el archivo .m se movió dentro de la carpeta en.lproj.

Simplemente elimine (solo referencia) el archivo .m del Xcode y mueva .m fuera del en.lproj. Añádelo de nuevo y solucionará el problema.

No se preocupe, recuperará todas sus conexiones.

COMO
fuente
Mi .m se generó automáticamente y aún no lo había cambiado. Lo hice y todo estuvo bien. Nada más había funcionado.
Entonio
2

Hoy encontré el mismo problema. Reiniciar XCode no solucionó el problema. Pude volver a la normalidad usando la opción "Eliminar" de "Datos derivados" del proyecto que se puede encontrar en Organizador . El organizador dice que "los datos derivados incluyen índices, resultados de compilación y registros". Supongo que el índice o el resultado de la compilación estaban causando este problema.

Praveen Kumar
fuente
2

en XCode, vaya al organizador, haga clic en proyecto, haga clic en eliminar datos derivados ... luego limpie el proyecto

Peter Lapisu
fuente
2

En mi caso, ayudó a hacer un "cambio falso" (solo un espacio) en el archivo de encabezado correspondiente.

jakob.j
fuente
Creo que esto también puede haberlo hecho por mí. En mi caso agregué una salida manualmente. Luego pude conectar mis fideos a él, así como crear nuevas salidas al arrastrar ctrl.
Daniel Wood
1
  1. ResultCell debe ser una subclase de UITableViewCell
  2. No debe arrastrar a UIViewsobre el lienzo vacío, debe arrastrar unUITableViewCell
  3. Deberá seleccionar la celda y cambiar lo que son sus subclase
  4. El propietario suele ser un controlador con una salida a la celda.

Cada vez que desee cargar una nueva celda, llame a:

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

después de la carga, use la celda y configure el ivar / salida a cero, listo para la siguiente carga

hay otras formas, pero esto es común

bshirley
fuente
Si hago eso, tengo exactamente el mismo problema. El Editor asistente no muestra el .h cuando estoy viendo la plumilla, y ctrl + arrastrar no crea el código de salida, muestra el error.
Tim Sullivan
2
¿Está utilizando 4.0.2 Xcode? Puede configurar manualmente el asistente de edición si se está portando mal. Supongo que ha reiniciado la aplicación para volver a probar este problema (Xcode 4 a menudo se beneficia de esto). Parece que no puede encontrar los archivos de clase en el proyecto, o algo tiene un nombre incorrecto: las mayúsculas son importantes. ¿Se está construyendo el proyecto actualmente? Esta es una funcionalidad de muy alto nivel que depende de la nueva tecnología del compilador.
bshirley
Aw, maldita sea. Sí, reiniciando Xcode e inmediatamente comenzó a funcionar. Disculpe, voy a caer sobre mi espada ahora.
Tim Sullivan
1

Quizás lo que funcionó para mí es esto ... (Xcode v4.5)

Esto no funcionó

Estaba tratando de controlar el arrastre en la definición de interfaz de mi .h

@interface SearchViewController : UIViewController

@end

Esto funcionó (puede ser así como se suponía que debía funcionar, no lo sabía antes). Vea los corchetes de apertura y cierre. Control de arrastrar y soltar después del corchete cerrado.

@interface SearchViewController : UIViewController
{
}

@end
Mouli
fuente
1

Tuve un problema similar con un proyecto escrito en Swift.

Lo que funcionó para mí fue configurar IBOutlet en un código como este

@IBOutlet var foo: UIView?

y luego conéctelo a Interface Builder arrastrándolo al pequeño círculo que apareció justo al lado de la línea de código.

Patricio
fuente
Esta es la ÚNICA forma en que pude hacer que funcionara para mí también. Estaba siguiendo un tutorial de Apple escrito para Objective-C (Comience a desarrollar aplicaciones de iOS hoy) y necesitaba conectar el campo de texto Nuevo elemento de tarea pendiente. Finalmente creé @IBOutlet var textField: UITextField? y conectado a eso, y funcionó. Usando XCode 6.4
andrewz
1

Ninguna de las soluciones anteriores resolvió el problema del conector para mí, así que archivé mi proyecto favorito hasta que encontré el siguiente hilo de stackoverflow:

https://stackoverflow.com/a/15873770/2846800

Había estado trabajando en un gran proyecto en una versión anterior de XCode y había desactivado la indexación. Al volver a habilitar la indexación, mi problema ahora está solucionado:

defaults delete com.apple.dt.XCode IDEIndexDisable

Ahora puedo usar las funciones D&D de Interface Builder. Espero que esto pueda ayudar a otros ...

user2846800
fuente
1

Este problema parece ser un error de Xcode que se repite sobre todo cuando reemplaza un archivo con un nuevo archivo del mismo nombre. Xcode parece mantener una referencia al archivo anterior del mismo nombre.

De todos modos, la forma de solucionar esto parece ser:

  1. Limpiar el proyecto
  2. Haga clic en (Su proyecto) en la vista Navegador de proyectos. Vaya a Compilar fuentes en Fases de compilación del objetivo para el que está construyendo. Elimine y vuelva a agregar el archivo .m que le está causando problemas.
  3. Alternativamente, en el Inspector de archivos (vista Utilidades) del archivo NIB, en Membresía de destino, desmarque y vuelva a verificar el nombre de destino.
  4. Reinicie Xcode por si acaso.
  5. Por supuesto, eliminar y volver a agregar el archivo .m solo debería solucionarlo también.

(Los pasos 1 y 2 solos lo arreglaron para mí).

codeburn
fuente
0

Si copió archivos de otro proyecto, asegúrese de marcar la casilla 'Agregar a objetivos'

Juan67
fuente
0

Síntoma similar, pero causa diferente.

Aparentemente, presioné la tecla de retroceso cuando el foco estaba en la vista del asistente, porque una de las líneas de comentarios de la plantilla de archivo estándar fue de // a / lo que hace que el archivo no se compile.

La corrección del comentario permitió al SDK analizar el archivo, reconocerlo como un UIViewController y agregarlo a la salida.

Entonces, si tiene este problema, compile o analice para ver si hay errores que deben solucionarse en el archivo .h de su controlador de vista. LUEGO pruebe las otras soluciones.

software evolucionado
fuente
0

Este puede ser un tema antiguo, pero en caso de que alguien tenga el mismo problema en el futuro, intente eliminar los archivos .xib, .hy .m asociados y cree otros nuevos. Para mí, el UIViewController en mi archivo .h no era violeta e incluso retroceder y escribir no ayudó.

SG
fuente
0

Simplemente coloque una línea entre @implementation y @synthesize. La mayoría de las respuestas aquí tienen eso en común. Funcionó para mi

@implementation 

@synthesize
user2371963
fuente
0

Intenté todo aquí y nada funcionó (usando una Vista previa de desarrollador para Xcode 5).

Lo único que funcionó para mí fue poner esta línea incompleta en mi archivo de interfaz:

@property (nonatomic, weak)

Por el motivo que sea, agregar puntos de venta y acciones arrastrando y soltando desde un .xib funcionó bien después de eso.

djibouti33
fuente
0

Para mí, si limpiar o eliminar DerivedData resolvió el problema.

Intenté eliminar y volver a crear mi clase UIViewController varias veces y tuve el problema una y otra vez.

Luego recreé la clase UIViewController y le di un nombre diferente. Esto resolvió mi problema.

Fabian Stark
fuente
0

He tenido este problema y encontré una solución que no figura en la lista anterior.

En mi caso, pude ver que había algo mal en el archivo .h de la clase porque mi controlador de vista personalizado no reconocía la clase: UIViewController (estaba en negro, no en púrpura). Todos los demás controladores de vista personalizados tenían: UIViewController en violeta.

en mi caso, y posiblemente el tuyo, necesitaba agregar la clase al menú desplegable de objetivos / fases de compilación / fuentes de compilación. Es necesario agregar el .m. Todos los otros .m estaban allí, pero no este.

Una vez que lo agregué, el: UIViewController apareció en púrpura y todo funcionó bien.

Michendo
fuente
0

Para mi caso, tengo varios proyectos con algunas otras dependencias. Intenté resolverlo eliminando datos derivados o reiniciando XCode pero no pudo funcionar. Al final, probé el siguiente método y funciona:

Vaya a target> Build Target Architectures Only> y configure Debug y Release en NO.

Configure esto para todos los proyectos en el espacio de trabajo y vuelva a compilar para asegurarse de que no haya otros errores. Quizás no tenga sentido, pero de alguna manera lo hizo. Durante mi compilación, tuve otros problemas, como errores del vinculador y símbolos no encontrados.

morph85
fuente
0

Para el archivo * .m de esta vista de clase, abra "Mostrar Inspector de archivos" y desmarque "Membresía de destino" para este proyecto, luego haga Limpiar (menú Producto-> Limpiar) y vuelva a marcar "Membresía de destino" para este proyecto

ingrese la descripción de la imagen aquí

Kozlov V
fuente
0

Usando Swift, tuve un problema similar. Descubrí que los comentarios eran parte del problema para mí.

Aproveché el controlador de vista predeterminado, trabajé un poco en él, luego creé un segundo controlador de vista copiando el primero completo, reduciéndolo a solo viewDidLoad () y cambiando el nombre de la clase a TestViewController. Las compilaciones funcionaron, el código se ejecutó. Todo estuvo bien.

Cuando fui a arrastrar un UITextField para crear una salida, no me dejaba. Noté que mis comentarios todavía decían "ViewController.swift", así que cambié el texto del comentario a "TestViewController.swift" y lo reconstruí. ¡Pude conectar mi enchufe!

Me pregunto si lo que ocurrió es que el indexador estaba leyendo los comentarios y también los nombres de las clases, y de alguna manera se confundió.

Antonio Ciolino
fuente
0

Espero que esto ayude a alguien.

Solo tuve que eliminar la carpeta de datos derivados. Debe hacer clic en Ventana -> Organizador -> Proyectos -> Eliminar datos derivados

Y REINICIE XCODE.

¡Usted debe ser bueno para ir!

Ronaldoh1
fuente
0

La nueva clase que no forma parte del "OBJETIVO" es probablemente la causa principal de esto, como se alude en algunas de estas respuestas.

Al crear una nueva clase de cacao, de forma predeterminada, la opción para agregar una nueva clase al objetivo está marcada de forma predeterminada, pero si, por cualquier motivo, esto no se verifica cuando presione guardar, tendrá este problema.

Nuevo objetivo de clase

Cualquiera de estas soluciones que agregan la nueva clase al destino de las aplicaciones funcionará para resolver el problema, y ​​es algo que todas estas 'correcciones' tienen en común.

Creo que XCode probablemente tiene algunos errores que hacen que un nuevo archivo, de forma predeterminada, NO se agregue al objetivo principal de la aplicación. La solución se reduce a agregar su clase 'rota' al OBJETIVO principal

Michael Bopp
fuente
0

En XCode 7.1, la adición del conector en un punto diferente en mi archivo fuente funcionó. El error que recibía se refería a una de mis variables como si fuera una clase (no tenía ningún sentido). El error dejó de ocurrir cuando agregué el conector debajo de esa variable en lugar de arriba.

usuario2683747
fuente
0

También hay una razón diferente para el problema ... si ha creado un nuevo archivo de clase de cocoa con una plantilla que no sea ios ... puede suceder ...

La solución sería eliminarlo y volver a crearlo con la plantilla correcta ingrese la descripción de la imagen aquí

Mihir Mehta
fuente