Punta cargada pero no se configuró la salida de 'vista'

742

Agregué un nuevo archivo nib a mi proyecto e intenté cargarlo.

Sin embargo, cuando hago clic en el icono de la barra de herramientas que se supone que me llevará a la vista que creé, recibo un NSInternalInconsistencyExceptionmensaje con el mensaje:

Finalización de la aplicación debido a la excepción no detectada 'NSInternalInconsistencyException', razón: '- [UIViewController _loadViewFromNibNamed: bundle:] cargó la plumilla "..." pero el punto de vista no estaba configurado.

Así que abrí mi archivo nib y veo por la vista que no hay salidas de referencia establecidas. Sin embargo, trato de hacer clic y arrastrar el círculo para "nueva salida de referencia" al Propietario del archivo, pero no me deja ... ¿qué debo hacer para que se muestre mi vista?

Juan
fuente
1
Intenta limpiar la construcción primero.
LetynSOFT
En mi caso, el error real fue que definí un método en viewController (- (void) setValue: (NSNumber *) value forKey: (NSString *) key) que anula el método ViewController que causa el error. Resolví cambiar el nombre de este método
christian mini

Respuestas:

1807

Ustedes tienen razón, pero como soy un recién llegado, me tomó un tiempo descubrir todos los pasos para hacerlo. Esto es lo que funcionó para mí:

  • Abra el archivo XIB que causa problemas
  • Haga clic en el icono del propietario del archivo en la barra izquierda (la superior, se ve como un cuadro amarillo contorneado)
  • Si no ve la barra lateral derecha, haga clic en el tercer icono arriba de "ver" en su barra de herramientas. Esto mostrará la barra lateral derecha
  • En la barra lateral derecha, haga clic en la tercera pestaña, la que se parece un poco a un periódico
  • En "Clase personalizada" en la parte superior, asegúrese de que Clase sea el nombre del ViewController que debe corresponder a esta vista. Si no, ingrésalo
  • En la barra lateral derecha, haga clic en la última pestaña, la que parece un círculo con una flecha
  • Debería ver "puntos de venta" con "vista" debajo. Arrastre el círculo al lado hasta el icono de "vista" en la barra izquierda (la inferior, parece un cuadrado blanco con un grueso contorno gris
  • Guarde el xib y vuelva a ejecutar
Josh Justice
fuente
También enfrenté este problema con el cacao y siempre y cuando la vista no se haya cargado / agregado a la jerarquía de vistas, todos los puntos de vista eran NIL. Después de llamar a addSubview o algo similar, todos los enchufes se conectaron. La parte divertida de mi historia fue que po viewcontroller.view.subviews mostró los objetos faltantes.
Apoc
11
Esta solución ya no funciona en Xcode 7.3 a partir de los pasos 4 y 5. En cambio, en el generador de interfaces, arrastre Control desde el propietario del Archivo a su Vista.
PeiweiChen
2
No funcionó para mí (no hay una sección de salidas en el inspector de conexiones, por lo tanto, no hay "vista" debajo de las salidas a las que conectarse), pero +1 por el esfuerzo que puso en su respuesta. :)
William T. Mallard
2
Si no ve "vista" en las salidas, también puede arrastrar ctlr desde el propietario de los archivos a la vista en el guión gráfico. Debe aparecer un menú contextual con una opción de "vista"
josef
1
@ WilliamT.Mallard Tengo el mismo comportamiento. MyViewControlleres una subclase de subclase de UIViewControllery no existe viewen "Outlets". Si subclases MyViewControllerdirectamente desde UIViewControllerla vista aparece en "Outlets". Magia o error de Xcode.
user2319066
201

Esta es la propuesta de Josh Justice, pero de manera gráfica (las imágenes son mías):

  1. Seleccionar propietario del archivo
  2. En el panel lateral derecho, seleccione la clase personalizada.
  3. Ingrese el nombre de la clase personalizada

ingrese la descripción de la imagen aquí

  1. En el panel lateral derecho, seleccione oultets
  2. Arrastre la salida de vista para ver el componente

ingrese la descripción de la imagen aquí

Finalmente, el controlador de vista se instancia con el código variable:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];
Javier Calatrava Llavería
fuente
1
Gracias Javier Calatrava Llavería ... ¡me ayudó mucho después de golpearme la cabeza durante una hora!
BharathRao
un exito muchas gracias
Bruno Sosa Fast Tag
Me perdí el quinto paso
hamada147
73

En general, puedo solucionarlo rehaciendo la conexión entre el Propietario del archivo y la vista. Control-arrastre desde el propietario del Archivo a su Vista (en IB) y seleccione la vista desde el menú emergente.

Rohit Mandiwal
fuente
62

La identidad de vista - Identidad de clase no se estableció. Después de establecerlo en la clase adecuada, el problema se resolvió.

Juan
fuente
Hola @John, he hecho esto pero sigo recibiendo esta excepción.
Mansuu ....
29

¿Está seguro de que tiene una UIView (o subclase) asignada a la propiedad "view" de yourViewController?

Haga clic derecho en "Propietario de archivo" en el panel izquierdo de la xib para su ViewController y verifique que la salida de "vista" esté configurada. Si no, ¡configúralo en una vista!

Esto definitivamente solucionará el problema

Shehbaz Khan
fuente
2
Respuesta clara y concisa.
sark9012
15

Para mí, todas las cosas indicadas aquí https://stackoverflow.com/a/6395750/939501 eran ciertas pero aún así arrojaba un error, porque creé una clase View con el nombre ABCView y luego la eliminé luego agregué un controlador de vista como ABCViewController, así que de alguna manera se refería al antiguo ABCView en el nuevo controlador de vista, tuve que eliminar el ABCViewController y agregar uno nuevo con un nombre diferente que resolvió mi problema.

Gracias

vishal dharankar
fuente
Sigue siendo un error en 2020.
Tamás Sengel
15

Tuve el mismo problema con XCode 4.6.3. Comencé con un par de archivos con el nombre MySettingsView.hy los .meliminé a favor MySettingsViewController.h, pero a pesar de probar la mayoría de las sugerencias mencionadas aquí, seguía fallando,

2013-07-05 11: 48: 17.205 MyApp [39024: c07] *** Finalización de la aplicación debido a la excepción no detectada 'NSInternalInconsistencyException', razón: '- [UIViewController _loadViewFromNibNamed: paquete:] cargó la plumilla "MySettingsView" pero la vista de salida no fue establecido.

Evidentemente, todavía estaba "confundido" al intentar cargar MySettingsView.xib en lugar de MySettingsView Controller .xib. Quizás su lógica de "haz lo que quiero decir" es demasiado elegante.

Así que solucioné el problema codificando el nombre de NIB / XIB en MySettingsViewController.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}
Nathan
fuente
10

Para cualquiera que esté utilizando un método xib para crear una UIView y tenga este problema, notará que no tendrá la salida "ver" en el menú del inspector de conexiones. Pero si configura la clase personalizada Propietarios del archivo en un UIViewController y verá la salida "ver", que simplemente puede conectar CMND a la salida CustomView.

manapate
fuente
Increíble. Muchas gracias. ¡Esta debería ser una respuesta aceptada!
Romano
7

Mi problema con esto fue causado por tener una punta duplicada en la carpeta de la clase que no tenía la vista establecida. xcode parecía estar eligiendo una punta para una compilación y luego la otra la próxima vez que construí el proyecto. Acabo de eliminar el otro. Se ve bien. Doh!

Mate
fuente
6

Acabo de pasar más de una hora tratando de descubrir por qué mi propiedad de vista no está configurada en mi controlador de vista al iniciarla desde nib. Recuerde llamar "[super initWithNibName ...]" dentro del initWithNibName de su controlador de vista.

Kamil.S
fuente
5

Acabo de arreglar esto en el mío. Gran proyecto, dos archivos. Uno era "ReallyLargeNameView" y otro era "ReallyLargeNameViewController"

Basado en la segunda respuesta elegida anteriormente, decidí que debería limpiar mi compilación. Nada, pero todavía era sospechoso de XCode (ya que tengo dos clases idénticas, debería abstraerlas pero eh ...) Entonces uno está trabajando, uno no. Los nombres de los propietarios de los archivos son copiados y pegados, salidas conectadas, xCode reiniciado, todavía nada.

Así que elimino la clase con nombre similar (que es una vista). Pronto, el nuevo error "salida interior no conectada" literalmente era "webView no valor clave" bla ... básicamente diciendo "Visual Studio es mejor". De todos modos ... borro el archivo con el nombre más pequeño, y bam, funciona.

XCode está confundido por archivos con nombres similares. Y el proyecto es lo suficientemente grande como para necesitar reiniciar un poco, eso puede ser parte de él.

Ojalá tuviera una respuesta más técnica que "XCode está confundido", pero bueno, xCode se confunde mucho en este momento. Confundido de la misma manera que ayudaría a un niño pequeño. Funciona ahora, :) Debería beneficiar a otros si lo anterior no soluciona nada.

Recuerde siempre limpiar sus compilaciones (eliminando también el simulador)

Stephen J
fuente
4

¡También tuve el mismo problema y mi problema fue que agregué otra localización (inglés) a la plumilla ViewControllers para que mi aplicación con el alemán de localización no pudiera encontrar la plumilla con el inglés de localización !! Espero que esto ayude a alguien!

Weini
fuente
4

Me enfrenté al mismo problema mientras borraba accidentalmente la referencia xib y la agregué nuevamente. Solo lo solucioné al hacer la conexión entre el propietario de los Archivos y la vista. También asegúrese de que la clase personalizada de FilesOwner sea su viewController esperado.

Nidhin
fuente
3

Para mí, el problema fue causado por llamar initWithNibName:bundle:. Estoy usando celdas de vista de tabla de un archivo plumín para definir formularios de entrada en los que se sientan tableViews. Como no tengo una vista, no tiene sentido enganchar a una. En cambio, si llamo al initWithStyle:método en su lugar, y desde allí, cargo el archivo nib, entonces las cosas funcionan como se esperaba.

DaveDude
fuente
3

Las respuestas anteriores casi resolvieron el problema para mí, pero faltaba el último paso.

  1. Cree un archivo xib y swift con el mismo nombre.

Agregar vista y archivo Swift

  1. Configure el propietario del archivo para que sea la subclase UIView.

ingrese la descripción de la imagen aquí

  1. Arrastre una salida desde la Vista a la subclase UIView, asígnele el nombre "contentView"

agregar la vista de contenido

  1. Agregue este inicializador personalizado para que cuando se cargue el xib adjunte el contentView

agregar la vista de contenido como una subvista

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Ahora se adjuntará cualquier @IBOutlets que agregue.

Saludos, Richard

PANADERO COSMO
fuente
2

Tuve el mismo problema, pero se solicitó una solución ligeramente diferente. El problema en este caso era la clase del propietario del archivo, en lugar de la clase de la vista. Para configurar esto, tuve que hacer clic en el icono de "reproducción hacia atrás" en la esquina inferior izquierda de la ventana del Creador de interfaces, y luego aparecieron opciones que aislaron las características del Propietario del archivo, el Primer respondedor y la Vista. Al hacer clic en el primero (un cuadro transparente grande), me permitió establecer su clase personalizada como se sugirió anteriormente.

Michael Stern
fuente
2

Tuve el mismo problema, pero se requirió una solución diferente. El problema en este caso era que la clase del Propietario del archivo no estaba conectada al archivo xib.

usuario1951454
fuente
2

Me encontré con algo muy similar esta noche, con una subclase Swift UIViewController. En este caso, ninguna de las soluciones anteriores funcionó, pero reordenar un poco mi código sí. Net-net, tener una extensión a la subclase ocurre antes de que la definición de la subclase en el mismo archivo parezca confundir XCode, a pesar de compilar bien; la solución fue colocar las extensiones después de la definición de la subclase.

He publicado los detalles en una respuesta a esta pregunta similar .

Cora Middleton
fuente
2

En mi caso, el inicializador designado - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil se implementó en la clase *** ViewController, por lo que incluso cuando llamo a otro inicializador para inicializar el objeto, se llamará al inicializador designado.

Entonces, para resolver este problema, verificar si - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNiltambién es una forma adecuada.

linulzy
fuente
2

Me encontré con este problema de una manera ligeramente diferente de las otras respuestas aquí.

Si simplemente creé un nuevo archivo xib, le agregué un UIViewController en Interface Builder y configuré esa clase personalizada de UIViewController en mi controlador de vista, lo que resultó en el bloqueo "no se configuró la salida de vista". Las otras soluciones aquí dicen controlar y arrastrar la salida de la vista a la Vista, pero para mí la salida de la vista estaba en gris y no pude controlarla.

la salida de visualización atenuada

Descubrí que mi error fue agregar un UIViewController en Interface Builder. En cambio, tuve que agregar una UIView y establecer la Clase personalizada del propietario del archivo en mi controlador de vista. Entonces podría controlar y arrastrar la salida de vista del Propietario del archivo a mi nueva vista UIView y todo funcionó como debería.

Brian Kendig
fuente
1

Solo tuve el mismo error en mi proyecto, pero una razón diferente. En mi caso, tenía una configuración de IBOutlet con el nombre "Ver" en mi clase personalizada UITableViewController. Sabía que "ver" era especial porque es un miembro de la clase base, pero no pensé que Ver (caso diferente) también sería un problema. Supongo que algunas áreas de Cocoa no distinguen entre mayúsculas y minúsculas, y probablemente cargar una xib es una de esas áreas. Así que lo renombré a DefaultView y todo está bien ahora.

eselk
fuente
1

seleccione el propietario de los archivos y vaya a abrir el inspector de identidad e indique el nombre de la clase a la que corresponde Si ninguno de los métodos anteriores funciona y aún no puede ver la salida de la vista, entonces proporcione una nueva conexión de salida de referencia al propietario del archivo, entonces podrá ver la salida de la vista. Haga clic en la vista Salida para establecer una conexión entre la Vista Salida y el propietario del archivo. Ejecute la aplicación, esto funciona bien.

Abhilash Reddy kallepu
fuente
1

En mi caso, la vista no se vio en xib. en xib, la vista era size = none (cuarta pestaña a la derecha). Establezco el tamaño en Forma libre y vuelvo a cargar xCode. view fue apelado y configuré el enlace apropiado para View.

OrdoDei
fuente
1

Si ha intentado todo y aún recibe este error, intente volver a crear el archivo de clase desde cero, pero recuerde seleccionar la casilla de verificación "Crear también archivo XIB". Esto vinculará automáticamente algunos elementos que no están vinculados al crear estos archivos por separado. Después de crear esto, es probable que pueda cortar y pegar todo en el nuevo XIB y debería funcionar bien.

Estoy encontrando este problema específicamente con la creación de archivos por separado en Swift.

Travis M.
fuente
1

para mí sucedió, cuando

  • Tengo una clase ViewController (.mm / h) asociada con el archivo Nib,
  • La vista UIV de este ViewController debe cargarse en la otra vista como una subvista,

  • llamaremos algo como esto

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }

Dónde

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Aquí faltaba loadView ,,, agregar esta línea resolvió mi problema.

Amitg2k12
fuente
1

Tuve el mismo problema, lo descubrí y es porque había marcado " Celdas estáticas " en las propiedades de Vista de tabla en la opción Contenido . Funcionó cuando cambió a " Dynamic Prototypes". La captura de pantalla está abajo. ingrese la descripción de la imagen aquí

Saranjith
fuente
1

Tuve un problema similar con Xcode 9.3, y la configuración de "Módulo" en el inspector de atributos "Propietario del archivo" en el módulo del proyecto me lo arregló.

nananta
fuente
1

Abra su archivo de guión gráfico donde existe su viewController, o un archivo relacionado con XIB con textEdit.app y verifique si el guión gráfico o el nombre XIB es el mismo de su viewController, luego cámbielo, guarde y vuelva a cargar / reiniciar Xcode.

Alessandro Ornano
fuente
1

Si está utilizando un método de inicio personalizado, verifique que está devolviendo algo válido. Me encontré con un código que se estrelló en algo como esto:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

En otra clase, el controlador se creó así:

CustomController *controller = [[CustomController alloc] init];

El problema es que en el método init, self no ha cambiado y debería verse así:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}
Declan Land
fuente
0

Me gustaría apoyar a Stephen J. Algunas veces X Code se confunde. Acabo de tener una experiencia en la que jugué mucho con la interfaz de usuario y agregué y eliminé puntos de venta varias veces. Los enchufes simplemente ya no se conectarían. Nunca descubrí una razón específica (había probado todas las soluciones anteriores), y solo tuve que eliminar la NIB y volver a crearla desde cero, y de hecho tuve que usar un nombre diferente para la NIB antes de que funcionara. (XCode 4.6.1) Perdió un par de horas en eso.

BrianH
fuente