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?

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


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.


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


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.


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


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];

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];

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.


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!


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!


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)
            }
        }

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];

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
} 

¡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.


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.


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.


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.


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.


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.


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


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];

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


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


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.


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.


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


0

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


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.


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.


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)

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.