No se pudo cargar NIB en el paquete

111

Estoy intentando integrar Janrain Engage como módulo personalizado con Appcelerator Titanium. Creé un módulo de muestra y arrastré la carpeta JREngage al módulo de muestra xcodeproj como se indica en la documentación de Jainrain.

Ahora doy el comando de compilación a este proyecto, luego ejecuto el ./build.pyy finalmente ejecuto el titanium runcomando. Lanza la aplicación en simulador con una pantalla en blanco e inmediatamente se bloquea arrojando el siguiente error.

Finalizando la aplicación debido a una excepción no detectada 'NSInternalInconsistencyException', motivo: 'No se pudo cargar NIB en el paquete:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (cargado) 'con el nombre' JRProvidersController ''

¿Por qué podría estar ocurriendo este error?

Goje87
fuente

Respuestas:

213

Visite las propiedades de los archivos .xib en el inspector de archivos, la propiedad "Membresía objetivo" en el cuadro de selección, luego su archivo xib se vinculó con su objetivo

siete libras
fuente
2
Además, si está utilizando alloc init, en lugar de initWithNibName: bunle:, lo que obtendrá es una pantalla negra.
Robert Childan
Preguntándose por qué un archivo .xib absolutamente sin usar debe colgarse en una carpeta de archivos de proyecto ...
Ben
Supongo que accidentalmente desmarqué esta casilla en lugar del diseño automático. Arreglado el bloqueo para mí, gracias
Yunus Nedim Mehel
todas las casillas de verificación de membresía de destino están atenuadas para mí ... ¿cuál podría ser el motivo?
Stas
64

En Targets -> Build Phases

Asegúrese de que se agregue el .xib Copy Bundle Resources, si no está presente, agregue el archivo .xib.

kunalg
fuente
Trabajó para mi. Esto suele suceder cuando copia / duplica un archivo xib. +1
VoidMain
22

trata de averiguarlo todo

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

en su código y asegúrese de que XXXControlleresté escrito correctamente

chings228
fuente
es fácil, ya que el nombre de la punta no está
autotipado
1
Se refería al nombre de la clase justo antes de la asignación, que está autotipada: P
Gil Sand
uiview se puede cargar desde nib pero no tiene initWithNibName:bundle:método
Vyachaslav Gerchicov
estamos hablando de viewcontroller
chings228
@ chings228 XXXControlloer y XXXController, vea la diferencia
Zaporozhchenko Oleksandr
15

Tuve el mismo problema (excepción 'No se pudo cargar NIB en el paquete: ..') después de actualizar mi xcode de 3.2 a 4.02. Mientras que la implementación de mi aplicación con Xcode 3.2 funcionó bien, se bloquea con xcode 4 generando la excepción mencionada anteriormente, pero solo cuando intenté implementar en el IOS Simulator (v.4.2). Apuntar al dispositivo IOS (v.4.1) actuó también con Xcode 4.

Resultó (después de horas de escarbar desesperadamente) que la razón era una configuración casi "oculta" en el archivo .xib:

Visite las propiedades de los archivos .xib en el inspector de archivos: la propiedad 'Ubicación' se estableció en 'Relativa al grupo' para todos los archivos .xib. Lo cambié a 'Relativo al proyecto' y listo: ¡todos los archivos .xib ahora están cargados correctamente en el simulador de IOS!

No tengo ni idea de cuál es la razón detrás de este extraño comportamiento de Xcode4, pero tal vez valga la pena intentarlo.

creator_11
fuente
Esto resolvió un bloqueo con el que estaba lidiando al compilar un complemento Quartz Composer muy desactualizado.
Peter Kazazes
12

En mi caso, fue muy extraño (use un guión gráfico): por alguna razón cambió de "Nombre base del archivo del guión gráfico principal" a "Nombre base del archivo nib principal" en el plist.

Cambiar de nuevo al "Nombre base del archivo del guión gráfico principal" (UIMainStoryboardFile) resolvió el problema

Tibidabo
fuente
1
Buena. Tuvo el mismo problema. Gracias. Esto lo resolvió.
Rameez Hussain
1
¡Esto resolvió mi problema! Gracias. Acababa de duplicar mi proyecto y renombrar todos los archivos pertinentes. Todo funcionó menos esto. ¡¡Ahora todo funciona !!
BeccaP
11

el error significa que no hay ningún archivo .xib con el "JRProvidersController"nombre. vuelva a comprobar si JRProvidersController.xibexiste.

cargarás .xib filecon

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
Hanuman
fuente
1
Hola Hanuman, he comprobado que existe el archivo JRProvidersController.xib. También intenté cambiar el nombre del archivo y ejecutarlo, incluso entonces está lanzando la misma excepción.
Goje87
intente cambiar la invocación a initWithNibName: NSStringFromClass ([MyViewController class]). También verifique de cerca el nombre del archivo, ya que distingue entre mayúsculas
Hanuman
He realizado los cambios sugeridos por usted, pero no he tenido éxito.
Goje87
7

Usando una vista Swift personalizada en un controlador de vista Objective-C (sí, incluso después de importar el <<PROJECT NAME>>-Swift.harchivo), intenté cargar la plumilla usando:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

... pero NSStringFromClass([MyCustomView class])vuelve <<PROJECT NAME>>.MyCustomViewy la carga falla. TL; DR Todo funcionó bien cargando la punta usando un literal de cadena:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];
Tom Howard
fuente
6

Como el objetivo de compilación era uno de mis dispositivos iOS, hice clic con el botón derecho en el archivo del producto (xyzw.app) y seleccioné el elemento emergente Mostrar en el Finder. Abrió una ventana con el xyzw.app adentro; Abrí el paquete usando Mostrar contenido del paquete y vi todos los archivos que esperaba, excepto un archivo, del que se quejaba, con una I mayúscula en lugar de una i minúscula en el nombre (zoomieVIew.nib en lugar de zoomieView.nib ). Había notado la I mayúscula en el nombre de archivo de la xib, la cambié y reconstruí; aparentemente Xcode dejó el nombre .nib generado tal como estaba. Eliminé zoomieVIew.nib en el paquete, lo reconstruí y Xcode recreó debidamente el archivo como zoomieView.nib. La aplicación comenzó a funcionar en el dispositivo.

Michael Brian Bentley
fuente
lo mismo aquí que Michael está describiendo. Había creado un archivo xib con un UITableViewCell personalizado. cuando abro el .app y busqué myCell.xib, veo que en realidad es myCell.nib. Además, la aplicación solo fallaba en el dispositivo y cargaba bien el archivo xib cuando se ejecutaba en el simulador. fue un poco complicado restablecerlo. al menos para mí. solo cuando eliminé el archivo, limpié el objetivo y copié el archivo, funcionó.
Nir Pengas
marcado, ya que también muestra una manera fácil de encontrar y ver el contenido del paquete
fotisgpap
doh. ¿Cómo podría llegar a esto de nuevo? gracias amable hombre :) Estaba al principio de la investigación de este problema
heximal
6

Tuve este problema con un guión gráfico y la punta se llamaba algo así como 'bKD-J3-fhr-view-ZSR-8m-2da'.

Fue porque estaba tratando de agregar una subvista a self.view en el inicio de un controlador de vista (withCoder). Self.view aún no existe.

¡Lo movió a viewDidLoad y todo mejor!

Will Larche
fuente
5

Mira el proyecto

Target -> Buid Phases -> Copy Bundle Resources

Encontrarás tu xib / storyborad con color rojo.

Simplemente elimínelo. También elimine todas las referencias del archivo faltante del proyecto.

Ahora arrastre este archivo storyboard / xib nuevamente a este Copy Bundle Resources . Todavía le mostrará el archivo en color rojo, pero no se preocupe por eso.

Simplemente limpie y construya el proyecto.

¡Ahora podrás volver a ejecutar tu proyecto con éxito!

iChirag
fuente
1
Esto resolvió mi problema, ya que obtuve dos guiones gráficos "MyStoryboard.storyboard" y "MyStoryboard ~ ipad.storyboad" ... así que del iPad objetivo eliminé "MyStoryboard.storyboard" de "Copiar recursos del paquete"
i89
5

Para Storyboard

Probé todas las soluciones publicadas aquí, pero nada funcionó para mí ya que estoy usando Storyboard con Swift 5.

Acabo de comenzar a crear controladores y vistas nuevos en la aplicación de prueba del guión gráfico, lo que encontré es que me faltaba el ID del guión gráfico de mi controlador de vista.

Así que aquí está mi solución, si desea ir desde ViewController A -> View Controller B

Paso 1. En el guión gráfico: solo asegúrese de que su ViewControllerA esté incrustado en el controlador de navegación

Paso 2. En el guión gráfico: ahora verifique si ha mencionado el ID del guión gráfico para su ViewControllerB que usará en el código como identificador.

ingrese la descripción de la imagen aquí

Paso 3. y finalmente asegúrese de que está presionando el controlador de esta manera en su ViewControllerA con un clic de botón.

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }
SwiftBoy
fuente
4

¡NO PONGA .xib CUANDO INSERTES EL NOMBRE XIB! ¡YA ESTÁ IMPLÍCITO!

No hagas esto:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

Hacer esto:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];
coolcool1994
fuente
4

Ejemplo de Swift4 si su MyCustomView.swift y MyCustomView.xib en un marco. Coloque esto en el inicio de MyCustomView :

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 
norbDEV
fuente
¡Finalmente! Trabajo en proyecto modular de iOS y esto es lo que estoy buscando. ¡Gracias!
Firda Sahidi
¿Qué es aViewInMyCustomView?
famfamfam
@famfamfam: a UIView
norbDEV hace
tks, ahora sé cómo usarlo
famfamfam
3

También encontré que falló cuando intenté cargar el XIB con un nombre como @ "MyFile.xib". Cuando utilicé @ "MyFile" funcionó, aparentemente siempre agrega la extensión. Pero el mensaje de error simplemente decía que no podía encontrar MyFIle.xib en el paquete; si hubiera dicho MyFile.xib.xib, habría sido una gran pista.

Jonathan Starr
fuente
La razón por la que no debe agregar la extensión es que en su paquete compilado, los archivos .xib también se compilan en archivos .nib. Entonces, en realidad, no había un MyFile.xib en su paquete, sin importar la extensión doble.
Pieter Jongsma
2

Trabajando en Xcode 4.6.3 y localizando mis archivos NIB también me encuentro con este problema.

Para mí, nada más ayudó además de cambiar "Control de versiones de documentos" en File Inspector a Implementación 5.0 en lugar de 6.1.

Krafter
fuente
2

Ocurre cuando cambia el nombre del archivo nib. Si ya lo ha hecho, cree una nueva plumilla (es decir, copie el contenido del archivo de plumilla actual en la nueva plumilla), elimine el archivo de plumilla anterior y resolverá su problema.

Editar: Con el nuevo Xcode a partir de la versión 4.6.3, si cambia el nombre (con la función de refactorización) de la clase Controlador, también cambiará el nombre del archivo nib y no tendrá que preocuparse por el problema de carga del nib.

Desarrollador de redes
fuente
2

Acabo de tener una experiencia interesante usando Xcode 6.3.

Seguí recibiendo este error también, a pesar de haber intentado todo lo que normalmente pensaría con ortografía, membresía de destino, etc., como se sugirió anteriormente. También intenté limpiar, eliminar datos derivados y también eliminar la aplicación del simulador varias veces para asegurarme de que el paquete se estaba construyendo correctamente, pero fue en vano.

Finalmente, siguiendo la respuesta de Brian Michael Bentley, finalmente decidí inspeccionar mi archivo .app en la carpeta de mi simulador en mi HD. Descubrí que todas mis puntas estaban allí, pero con un abc ~ ipad.nib en lugar del abc.nib esperado. Cambié manualmente el nombre de todos estos archivos para eliminar la parte ~ ipad, ¡lo construí y funcionó!

Tratando de ver por qué estos se han agregado con la palabra clave ~ ipad, miré la configuración de mi proyecto y, de hecho, en mi pestaña General> Información de implementación, solo había seleccionado iPad. Estaba intentando ejecutar un simulador de iPhone. Creo que en el pasado, Xcode daría un error que indicaba que el binario no era compatible con iPhone y no lograría ejecutar la aplicación.

Eliminé la aplicación del simulador y volví a hacer lo mismo, nuevamente con solo iPad compatible. Esta vez, el .app contenía abc ~ iphone.nib Y abc ~ ipad.nib para cada guión gráfico esperado y se ejecutó perfectamente en el simulador de iPhone. Nuevamente: si elegimos iPad solo en nuestra configuración de Información de implementación, no debería ejecutarse en iPhone Simulator. Este es un error de Xcode.

Entonces, hay un comportamiento inconsistente aquí por parte de Xcode y, desafortunadamente, es un error intermitente y esto puede ser difícil de reproducir, pero puse esto aquí para que pueda ayudar a otros en el futuro.

Justin-Nicholas Y. Toyama
fuente
2

Tenía este mismo problema, nada funcionó, así que pensé algo extraño con los datos derivados.

En xcode 6.3.2 tuve que:

En el menú XCode -> Preferencias -> pestaña Ubicaciones -> En ubicaciones, cambie los datos derivados a relativos y luego vuelva a los valores predeterminados

Luego, la punta se cargó bien.

Kevin
fuente
Acabo de eliminar la carpeta de datos derivados y funcionó. Parece confundirse porque cambié el nombre del archivo xib en la navegación del proyecto. Un extraño.
Kyle Goslan
2

Su archivo XIB probablemente esté fuera de la carpeta de su proyecto. Esto conduce a que no aparezca el inspector de destino. Sin embargo, mover el archivo XIB a la carpeta de su proyecto debería solucionarlo.

hhamm
fuente
2

Tenga cuidado: Xcode distingue entre mayúsculas y minúsculas con los nombres de archivo. No es lo mismo "diversión" que "diversión".

oskarko
fuente
El nombre de archivo de mi plumilla era FormItemCheckBoxCell.nib, la clase era FormItemCheckboxCell. Capitalizar "Box" en el nombre me costó 45 minutos de mi vida.
SafeFastExpressive
1

En caso de que esté utilizando marcos en su proyecto, debe asegurarse de que está cargando desde el paquete correcto:

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];
david72
fuente
1

para mí, se resolvió simplemente cambiando el nombre del archivo de mi celda al mismo que su clase.

En el Inspector de atributos (tercera pestaña en la barra lateral derecha en el storyboard):

  1. Establecer el identificador de la celda (por ejemplo: "MyCellId"),
  2. Establecer la clase de la celda (por ejemplo: "MyCellClass" cuando el archivo es "MyCellClass"),
  3. Registre la celda en su controlador de vista de la siguiente manera:

    tableView.register (UINib (nibName: "MyCellClass", paquete: nulo), forCellReuseIdentifier: "MyCellId")

Marjan Basiri
fuente
0

Tengo este problema al transformar mi código anterior de XCode 3x a XCode 4 y lo resolví simplemente cambiando el nombre de wwwwwwww.xib a RootViewController.xib

Nikolay Frick
fuente
0

Tuve el mismo problema. En mi caso, el nombre de la punta era "MyViewController.xib" y lo renombré a "MyView.xib". Esto eliminó el error.

También estaba moviendo un proyecto de XCode 3 a 4.2. No importaba cambiar el tipo de ruta.

cabeza de barco
fuente
0

Además, la razón puede ser que el archivo se busque en la carpeta específica del idioma equivocado cuando se metió con las localizaciones.

MacMark
fuente
0

Cada vez que refactorizo ​​el nombre de un controlador de vista que está en mi appDelegate, pierdo tiempo en esto. La refactorización no cambia el nombre de la punta en initWithNibName: @ "MYOldViewControllerName".

Nubesurfin
fuente
0

Tuve el mismo problema, cambiar el nombre de mi identificador de controlador de vista en el guión gráfico funcionó para mí.

Dave
fuente
0

Me di cuenta de que puede suceder si cambias de rama en git y te olvidas de hacer una limpieza. Entonces xib está ahí y todo está encontrado, pero la compilación exacta puede tener problemas. Así que por si acaso no olvides hacer una limpieza.

Ezeki
fuente
0
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

En el código anterior, si también le da una extensión de archivo como "SecondView.xib", entonces está mal y le dará el error anterior. En su lugar, utilice "SecondView". He cometido ese error.

NSPratik
fuente
0

Esto funcionó para mí. Asegúrese de haber escrito el nombre de la punta correctamente.

[[NSBundle mainBundle] loadNibNamed: @ "Graphview" propietario: self options: nil];

Graphview (nombre de la punta)

Narasimha Nallamsetty
fuente