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?

Goje87
fonte

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

sete libras
fonte
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.

kunalg
fonte
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

chings228
fonte
é 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?

creator_11
fonte
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

Tibidabo
fonte
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];
Hanuman
fonte
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];
Tom Howard
fonte
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.

Michael Brian Bentley
fonte
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!

Will Larche
fonte
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 !!

iChirag
fonte
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)
            }
        }
SwiftBoy
fonte
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];
coolcool1994
fonte
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
} 
norbDEV
fonte
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.

Jonathan Starr
fonte
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.

krafter
fonte
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.

NetDeveloper
fonte
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.

Justin-Nicholas Y. Toyama
fonte
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.

Kevin
fonte
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.

hhamm
fonte
2

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

Oskarko
fonte
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];
david72
fonte
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")

Marjan Basiri
fonte
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

Nikolay Frick
fonte
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.

cabeça do navio
fonte
0

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

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

cloudsurfin
fonte
0

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

Dave
fonte
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

Ezeki
fonte
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.

NSPratik
fonte
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)

Narasimha Nallamsetty
fonte