Não foi possível carregar o NIB no pacote


111

Estou tentando integrar o Janrain Engage como módulo personalizado com o Appcelerator Titanium. Eu criei um módulo de amostra e arrastei a pasta JREngage para o módulo de amostra xcodeproj conforme indicado na documentação do Jainrain.

Agora eu dou o comando de construção para este projeto, depois executo o ./build.pye, finalmente, executo o titanium runcomando. Ele inicia o aplicativo no simulador com uma tela em branco e imediatamente trava, gerando o seguinte erro.

Encerrando o aplicativo devido à exceção não capturada 'NSInternalInconsistencyException', motivo: 'Não foi possível carregar o NIB no pacote:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (carregado) 'com o nome' JRProvidersController ''

Por que esse erro pode estar ocorrendo?

Respostas:


213

Visite as propriedades dos arquivos .xib no inspetor de arquivos, a propriedade "Target Membership" na caixa de seleção, então seu arquivo xib foi vinculado ao seu destino


2
Além disso, se você estiver usando o alloc init, em vez de initWithNibName: bunle :, o que você verá é uma tela preta.
Robert Childan de

Querendo saber por que um arquivo .xib absolutamente não utilizado deve travar em uma pasta de arquivos de projeto ...
Ben

Eu acho que acidentalmente desmarquei esta caixa de seleção em vez de autolayout. Consertou a falha para mim, obrigado
Yunus Nedim Mehel

todas as caixas de seleção de associação de destino estão desativadas para mim ... qual poderia ser o motivo?
Stas de

64

No Targets -> Build Phases

Certifique-se de que o .xib seja adicionado Copy Bundle Resources, se não estiver presente, adicione o arquivo .xib.


Funcionou para mim. Isso geralmente acontece quando você copia / duplica um arquivo xib. +1
VoidMain 01 de

22

tente descobrir tudo

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

em seu código e certifique-se de que XXXControllerestá escrito corretamente


é fácil, já que o nibname não é autotipado
chings228

1
Ele quis dizer o nome da classe logo antes do aloc, que é autotipado: P
Gil Sand

uiview pode ser carregado do bico, mas não tem initWithNibName:bundle:método
Vyachaslav Gerchicov

estamos falando sobre viewcontroller
chings228

@ chings228 XXXControlloer e XXXController, veja a diferença
Zaporozhchenko Oleksandr

15

Eu tive o mesmo problema (exceção 'Não foi possível carregar o NIB no pacote: ..') após atualizar meu xcode de 3.2 para 4.02. Enquanto a implantação do meu aplicativo com o Xcode 3.2 funcionou bem, ele travou com o xcode 4, levantando a exceção mencionada acima - mas apenas quando tentei implantar no IOS Simulator (v.4.2). A segmentação do dispositivo IOS (v.4.1) funcionou também com o Xcode 4.

Descobriu-se (após horas de busca desesperada) que o motivo era uma configuração quase "oculta" no arquivo .xib:

Visite as propriedades dos arquivos .xib no inspetor de arquivos: A propriedade 'Local' foi definida como 'Relativa ao Grupo' para todos os arquivos .xib. Eu mudei para 'Relativo ao projeto' e voila: todos os arquivos .xib agora estão carregados corretamente no simulador IOS!

Não tenho ideia de qual é a razão por trás disso para esse comportamento estranho do Xcode4, mas talvez valha a pena tentar?


Isso resolveu uma falha com a qual estava lidando ao compilar um plugin do Quartz Composer muito desatualizado.
Peter Kazazes

12

No meu caso, foi muito estranho (use um storyboard): por algum motivo, ele mudou de "Nome da base do arquivo do storyboard principal" para "Nome da base do arquivo da ponta principal" no plist.

Alterar de volta para "Nome da base do arquivo de storyboard principal" (UIMainStoryboardFile) resolveu o problema


1
Um bom. Tive o mesmo problema. Obrigado. Isso resolveu tudo.
Rameez Hussain,

1
Isso resolveu meu problema! Obrigado. Eu tinha acabado de duplicar meu projeto e renomear todos os arquivos pertinentes. Tudo funcionou, menos isso. Agora tudo funciona !!
BeccaP

11

o erro significa que não há arquivo .xib com "JRProvidersController"nome. verifique novamente se JRProvidersController.xibexiste.

você vai carregar .xib filecom

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

1
Ei Hanuman, Eu verifiquei se o arquivo JRProvidersController.xib existe. Também tentei renomear o arquivo e executá-lo, mesmo assim ele está gerando a mesma exceção.
Goje87,

tente alterar a chamada para initWithNibName: NSStringFromClass ([classe MyViewController]). Verifique também o nome do arquivo, pois ele
diferencia


Eu fiz as alterações sugeridas por você, mas não tive sucesso.
Goje87

7

Usando uma visualização Swift personalizada em um controlador de visualização Objective-C (sim, mesmo depois de importar o <<PROJECT NAME>>-Swift.harquivo), tentei carregar a ponta usando:

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

... mas NSStringFromClass([MyCustomView class])retorna <<PROJECT NAME>>.MyCustomViewe o carregamento falha. TL; DR Tudo funcionou bem ao carregar a ponta usando um literal de string:

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

6

Com o destino de compilação sendo um dos meus dispositivos iOS, cliquei com o botão direito no arquivo do produto (xyzw.app) e selecionei o item pop-up Mostrar no Finder. Ele abriu uma janela com o xyzw.app dentro; Abri o pacote usando Mostrar conteúdo do pacote e vi todos os arquivos que esperava, exceto um arquivo, aquele do qual ele estava reclamando, com I maiúsculo em vez de i minúsculo no nome (zoomieVIew.nib em vez de zoomieView.nib ) Eu tinha notado o I maiúsculo no nome do arquivo xib, mudei e reconstruí; aparentemente, o Xcode deixou o nome .nib gerado do jeito que estava. Excluí zoomieVIew.nib do pacote, recompilei e o Xcode recriou devidamente o arquivo como zoomieView.nib. O aplicativo começou a funcionar no dispositivo.


a mesma coisa aqui que o michael está descrevendo. Eu criei um arquivo xib contendo um UITableViewCell personalizado. quando abro o .app e procuro myCell.xib, vejo que é realmente myCell.nib. além disso, o aplicativo estava apenas travando no dispositivo e carregava o arquivo xib corretamente ao ser executado no simulador. foi um pouco complicado reiniciá-lo. para mim, pelo menos. só quando apaguei o arquivo, limpei o destino e copiei o arquivo de volta - funcionou.
Nir Pengas

marcado, pois também mostra uma maneira fácil de localizar e visualizar o conteúdo do pacote
fotisgpap

doh. como eu poderia fazer isso de novo. obrigado homem :) eu estava no início da pesquisa deste problema
heximal

6

Tive esse problema com um storyboard e a ponta era chamada de algo como 'bKD-J3-fhr-view-ZSR-8m-2da'.

Foi porque eu estava tentando adicionar uma subvisualização a self.view no init de um controlador de visão (withCoder). Self.view ainda não existe.

Movido para viewDidLoad e tudo melhor!


5

Dê uma olhada no projeto

Target -> Buid Phases -> Copy Bundle Resources

Você encontrará seu xib / storyborad com a cor vermelha.

Apenas remova-o. Remova também todas as referências do arquivo ausente do projeto.

Agora arraste este arquivo storyboard / xib novamente para ele Copy Bundle Resources. Ele ainda mostrará seu arquivo com a cor vermelha, mas não se preocupe com isso.

Basta limpar e construir o projeto.

Agora você terá seu projeto funcionando novamente com sucesso !!


1
Isso resolveu meu problema, já que eu tenho dois storyboards "MyStoryboard.storyboard" e "MyStoryboard ~ ipad.storyboad" ... então, do destino do iPad, removi "MyStoryboard.storyboard" de "Copiar recursos de pacote"
18 de

5

Para Storyboard

Tentei todas as soluções postadas aqui, mas nada funcionou para mim, pois estou usando o Storyboard com Swift 5.

Acabei de começar a construir novos controladores e visualizações no aplicativo de teste de storyboard, o que descobri é que estava faltando o ID do storyboard do meu controlador de visualização.

Então aqui está minha solução, se você quiser ir de ViewController A -> View Controller B

Etapa 1. No storyboard: apenas certifique-se de que seu ViewControllerA esteja embutido no controlador de navegação

Etapa 2. No storyboard: agora verifique se você mencionou a ID do Storyboard para o seu ViewControllerB, que você usará no código como Identificador.

insira a descrição da imagem aqui

Etapa 3. e, finalmente, certifique-se de empurrar o controlador desta forma em seu ViewControllerA com um clique de botão.

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

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

4

NÃO COLOQUE .xib QUANDO VOCÊ INSERIR O NOME XIB! JÁ ESTÁ IMPLÍCITA!

Não faça isso:

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

Faça isso:

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

4

Exemplo Swift4 se seu MyCustomView.swift e MyCustomView.xib em uma estrutura. Coloque isso no init do 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! Trabalho em projeto modular de iOS e é isso que procuro. Obrigado!
Firda Sahidi

o que é aViewInMyCustomView?
famfamfam

@famfamfam: a UIView
norbDEV

tks, agora eu sei como usar
famfamfam

3

Também descobri que ele falhou quando tentei carregar o XIB com um nome como @ "MeuArquivo.xib". Quando acabei de usar @ "MyFile" funcionou - aparentemente, ele sempre adiciona a extensão. Mas a mensagem de erro apenas dizia que não foi possível encontrar MyFile.xib no pacote - se tivesse dito MyFile.xib.xib, isso teria sido uma grande pista.


A razão pela qual você não deve adicionar a extensão é que em seu pacote compilado, os arquivos .xib também são compilados em arquivos .nib. Portanto, na verdade não havia um MyFile.xib em seu pacote, esqueça a extensão dupla.
Pieter Jongsma

2

Trabalhando no Xcode 4.6.3 e localizando meus arquivos NIB, também me deparo com esse problema.

Para mim, nada mais ajudou além de alterar "Controle de versão do documento" no Inspetor de arquivos para Deployment 5.0 em vez de 6.1.


2

Acontece quando você renomeia o arquivo nib. Se você já fez isso, crie um novo nib (ou seja, copie o conteúdo do arquivo nib atual para o novo nib), exclua o arquivo nib antigo e isso resolverá seu problema.

Edit: Com o novo Xcode a partir da versão 4.6.3, se você renomear (com o recurso de refatoração) a classe Controller, ele renomeará o arquivo nib também e você não precisa se preocupar com o problema de carregamento do nib.


2

Acabei de ter uma experiência interessante usando o Xcode 6.3.

Também continuei recebendo esse erro, apesar de tentar tudo que você normalmente pensaria sobre ortografia, associação de destino etc., conforme sugerido acima. Também tentei limpar, excluir dados derivados e também excluir o aplicativo do simulador várias vezes para garantir que o pacote estava sendo construído corretamente, mas sem sucesso.

Finalmente, seguindo a resposta de Brian Michael Bentley, eu finalmente decidi inspecionar meu arquivo .app na pasta do meu simulador no meu HD. Descobri que todos os meus nibs estavam lá, mas com um abc ~ ipad.nib em vez do abc.nib esperado. Eu renomei manualmente todos esses arquivos para remover a parte ~ ipad, construí e funcionou!

Tentando ver por que eles foram anexados com a palavra-chave ~ ipad, olhei as configurações do meu projeto e, de fato, na minha guia Geral> Informações de implantação, eu tinha apenas o iPad selecionado. Eu estava tentando rodar em um simulador de iPhone. Acredito que, no passado, o Xcode dava um erro indicando que o binário não era compatível com o iPhone e você não conseguiria executar o aplicativo.

Excluí o aplicativo do simulador e fiz a mesma coisa novamente - novamente com suporte apenas para iPad. Desta vez, o .app continha abc ~ iphone.nib E abc ~ ipad.nib para cada storyboard esperado e funcionou perfeitamente no simulador do iPhone. Novamente - se escolhermos iPad apenas em nossas configurações de Informações de implantação, ele não deve ser executado no iPhone Simulator. Este é um bug do Xcode.

Portanto, há algum comportamento inconsistente aqui por parte do Xcode e, infelizmente, é um bug intermitente e pode ser difícil de reproduzir, mas coloquei isso aqui para que possa ajudar outros no futuro.


2

Tive esse mesmo problema, nada funcionou, então descobri algo estranho com dados derivados.

No xcode 6.3.2 eu tive que:

No menu XCode -> Preferências -> Guia Locais -> Em locais, altere os dados derivados para relativos e, em seguida, alterne de volta para o padrão

Então a ponta carregou bem.


Acabei de excluir a pasta Derived Data e funcionou. Parece ficar confuso porque renomeei o arquivo xib na navegação do projeto. Estranho.
Kyle Goslan

2

Seu arquivo XIB provavelmente está fora da pasta do projeto. Isso faz com que o Inspetor de destino não seja exibido. No entanto, mover o arquivo XIB para a pasta do projeto deve corrigir isso.


2

Cuidado: o Xcode faz distinção entre maiúsculas e minúsculas nos nomes dos arquivos. Não é o mesmo "divertido" que "divertido".


O nome do arquivo para minha ponta era FormItemCheckBoxCell.nib, a classe era FormItemCheckboxCell. Capitalizar "Caixa" no nome custou 45 minutos da minha vida.
SafeFastExpressive

1

Caso você esteja usando frameworks em seu projeto, você precisa se certificar de que está carregando do pacote correto:

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

1

para mim, foi resolvido apenas alterando o nome do arquivo da minha célula para o mesmo da classe.

No Inspetor de atributos (terceira guia na barra lateral direita do storyboard):

  1. Defina o identificador da célula (por exemplo: "MyCellId"),
  2. Defina a classe da célula (por exemplo: "MyCellClass" quando o arquivo for "MyCellClass"),
  3. Registre a célula em seu controlador de visualização da seguinte forma:

    tableView.register (UINib (nibName: "MyCellClass", pacote: nil), forCellReuseIdentifier: "MyCellId")


0

Tive este problema ao transformar meu código antigo de XCode 3x para XCode 4 e resolvi-o apenas renomeando wwwwwwww.xib para RootViewController.xib


0

Eu tive o mesmo problema. No meu caso, o nome da ponta era "MyViewController.xib" e mudei o nome para "MyView.xib". Isso eliminou o erro.

Eu também estava movendo um projeto do XCode 3 para 4.2. Alterar o tipo de caminho não importava.


0

Além disso, o motivo pode ser o arquivo procurado na pasta específica do idioma errado quando você mexeu nas localizações.


0

Toda vez que refatoro o nome de um controlador de visualização que está em meu appDelegate, perco tempo com isso. A refatoração não altera o nome da ponta em initWithNibName: @ "MYOldViewControllerName".


0

Eu tive o mesmo problema, renomear meu identificador de controlador de visualização no storyboard funcionou para mim.


0

Percebi que isso pode acontecer se você alternar entre branches no git e esquecer de fazer uma limpeza. Então o xib está lá e tudo é encontrado, mas a compilação exata pode ter problemas. Então, apenas no caso, não se esqueça de fazer uma limpeza


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

No código acima, se você também fornecer uma extensão de arquivo como "SecondView.xib", então ela está errada e apresentará o erro acima. Em vez disso, use "SecondView". Eu cometi esse erro.


0

Isso funcionou para mim. Verifique se você digitou o nome da ponta corretamente.

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

Graphview (nome da ponta)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.