Adicionei um novo arquivo de ponta ao meu projeto e tentei carregá-lo.
No entanto, quando clico no ícone da barra de ferramentas que deveria me levar à exibição que criei, recebo NSInternalInconsistencyException
a mensagem:
Finalizando o aplicativo devido à exceção não capturada 'NSInternalInconsistencyException', motivo: '- [UIViewController _loadViewFromNibNamed: bundle:] carregou a ponta "...", mas a saída da visualização não estava definida.'
Então, eu abri meu arquivo de ponta e vejo que não há saídas de referência definidas. No entanto, tento clicar e arrastar o círculo de "nova saída de referência" para o Proprietário do arquivo, mas isso não me permite ... o que preciso fazer para que minha exibição seja exibida?
Respostas:
Vocês estão certos, mas como eu sou novato, demorei um pouco para descobrir todas as etapas para fazer isso. Aqui está o que funcionou para mim:
fonte
MyViewController
é uma subclasse de subclasse deUIViewController
e não existeview
em "Outlets". Se eu subclasseMyViewController
direta daUIViewController
exibição aparece em "Outlets". Magia ou bug do Xcode.Esta é a proposta de Josh Justice, mas de maneira gráfica (as fotos são minhas):
Finalmente, o View Controller é instanciado com o código rotativo:
fonte
Geralmente, posso corrigi-lo refazendo a conexão entre o Proprietário do arquivo e a visualização. Arraste com a tecla Control pressionada do proprietário do arquivo para sua Visualização (no IB) e selecione a visualização no menu pop-up.
fonte
A identidade de exibição - identidade de classe não foi definida. Depois de configurá-lo para a classe apropriada, o problema foi resolvido.
fonte
Você tem certeza de que possui uma UIView (ou subclasse) atribuída à propriedade "view" do seuViewController?
Clique com o botão direito do mouse em "Proprietário do arquivo" no painel esquerdo do xib para o seu ViewController e verifique se a saída "view" está definida. Caso contrário, defina-o para uma visualização!
isso definitivamente corrigirá o problema
fonte
Para mim, todas as coisas declaradas aqui https://stackoverflow.com/a/6395750/939501 eram verdadeiras, mas ainda assim geravam erros, razão pela qual criei uma classe View com o nome ABCView e a excluí depois, adicionei um controlador de exibição como ABCViewController Então, de alguma forma, ele estava se referindo ao antigo ABCView no novo controlador de exibição. Eu tive que excluir o ABCViewController e adicionar um novo com um nome diferente que resolvesse meu problema.
obrigado
fonte
Eu tive o mesmo problema com o XCode 4.6.3. Eu tinha começado com alguns arquivos nomeados
MySettingsView.h
e,.m
mas os apaguei em favor deMySettingsViewController.h
, mas, apesar de tentar a maioria das dicas mencionadas aqui, ele continuava se enganando com,Evidentemente, ainda estava "confuso", tentando carregar o MySettingsView.xib em vez do MySettingsView Controller .xib. Talvez a lógica "faça o que eu quero dizer" seja muito chique.
Então, eu resolvi o problema codificando o nome NIB / XIB em MySettingsViewController.m:
fonte
Para qualquer pessoa que esteja usando um método xib para criar um UIView e tendo esse problema, notará que não terá a saída "view" no menu do inspetor de conexões. Mas se você definir a classe personalizada Proprietários do arquivo como um UIViewController e verá a saída "view", na qual você pode apenas CMND conectar uma saída ao CustomView.
fonte
Meu problema com isso foi causado por uma ponta duplicada na pasta da classe que não tinha o modo de exibição definido. O xcode parecia estar escolhendo uma ponta para uma compilação e depois a outra na próxima vez que eu construí o projeto. Apenas excluiu o outro. Parece bom. Doh!
fonte
Passei mais de uma hora tentando descobrir por que minha propriedade view não está definida no meu controlador de exibição após iniciá-la a partir da ponta. Lembre-se de chamar "[super initWithNibName ...]" dentro do initWithNibName do seu controlador de exibição.
fonte
Eu apenas consertei isso no meu. Projeto grande, dois arquivos. Um era "ReallyLargeNameView" e o outro era "ReallyLargeNameViewController"
Com base na segunda resposta escolhida acima, decidi que deveria limpar minha compilação. Nada, mas eu ainda era suspeito do XCode (como eu tenho duas classes idênticas, deveria abstraí-las, mas eh ...) Então, alguém está trabalhando, não está. Os nomes dos proprietários dos arquivos são tanto quanto copiados e colados, tomadas reiniciadas, xCode reiniciado, ainda nada.
Então, eu excluo a classe nomeada semelhante (que é uma exibição). Logo, o novo erro "saída interna não conectada" era literalmente "webView, não valor-chave" blah ... basicamente dizendo "Visual Studio's better". Enfim ... eu apago o arquivo menor chamado, e bam, ele funciona.
O XCode é confundido por arquivos com nomes semelhantes. E o projeto é grande o suficiente para precisar reiniciar um pouco, o que pode fazer parte dele.
Gostaria de ter uma resposta mais técnica do que "XCode está confuso", mas bem, o xCode fica muito confuso neste momento. Não confundiu da mesma maneira que eu ajudaria uma criança. Funciona agora, :) Deverá beneficiar outras pessoas se o acima não corrigir nada.
Lembre-se sempre de limpar suas compilações (excluindo também o simulador)
fonte
Eu também tive o mesmo problema e meu problema foi que eu adicionei outra localização (em inglês) à ponta do ViewControllers para que meu aplicativo com o alemão de localização não conseguisse encontrar a ponta com o inglês de localização !! Espero que isso ajude alguém!
fonte
fonte
Para mim, o problema foi causado pela ligação
initWithNibName:bundle:
. Estou usando células de exibição de tabela de um arquivo de ponta para definir os formulários de entradatableViews
. Como não tenho uma visão, não faz sentido ligar a uma. Em vez disso, se eu chamar oinitWithStyle:
método e, a partir daí, carregar o arquivo nib, tudo funcionará conforme o esperado.fonte
As respostas anteriores quase resolveram o problema para mim, mas o último passo estava faltando.
Agora, todos os @IBOutlets adicionados serão anexados.
Cheers, Richard
fonte
Eu tinha o mesmo problema, mas era necessária uma solução um pouco diferente. O problema nesse caso foi a classe do proprietário do arquivo, em vez da classe da exibição. Para definir isso, tive que clicar no ícone "reproduzir para trás" no canto inferior esquerdo da janela do Interface Builder, e apareceram opções que isolavam as características do proprietário do arquivo, do primeiro respondente e da exibição. Clicar no primeiro (uma grande caixa transparente) permitiu-me definir sua classe personalizada, conforme sugerido acima.
fonte
Eu tive o mesmo problema, mas uma solução diferente foi necessária. O problema neste caso foi a classe do proprietário do arquivo não estava conectada ao arquivo xib.
fonte
Encontrei algo muito semelhante hoje à noite, com uma subclasse Swift UIViewController. Nesse caso, nenhuma das correções acima funcionou, mas reorganizar um pouco meu código funcionou. Net-net, com uma extensão para a subclasse, ocorre antes que a própria definição da subclasse no mesmo arquivo pareça confundir o XCode, apesar de compilar bem; a correção foi colocar as extensões após a definição da subclasse.
Postei os detalhes em uma resposta a essa pergunta semelhante .
fonte
No meu caso, o inicializador designado
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
na classe *** ViewController foi implementado, portanto, mesmo quando eu chamar outro inicializador para inicializar o objeto, o inicializador designado será chamado.Portanto, para resolver esse problema, verifique se o
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
também é uma maneira adequada.fonte
Encontrei esse problema de uma maneira um pouco diferente das outras respostas aqui.
Se eu simplesmente criasse um novo arquivo xib, adicionasse um UIViewController a ele no Interface Builder e definisse a classe personalizada do UIViewController como meu controlador de exibição, o que resultaria na falha "a saída de exibição não foi configurada". As outras soluções aqui dizem para controlar e arrastar a saída de exibição para o View, mas para mim a saída de exibição estava acinzentada e não consegui controlá-la.
Eu descobri que meu erro foi adicionar um UIViewController no Interface Builder. Em vez disso, tive que adicionar um UIView e definir a classe personalizada do proprietário do arquivo como meu controlador de exibição. Então eu poderia controlar e arrastar a saída do proprietário do arquivo para o meu novo modo de exibição UIView e tudo funcionou como deveria.
fonte
Só tive o mesmo erro no meu projeto, mas motivo diferente. No meu caso, eu tinha uma configuração do IBOutlet com o nome "View" na minha classe UITableViewController personalizada. Eu sabia que "view" era especial porque ele é um membro da classe base, mas não achei que View (caso diferente) também fosse um problema. Eu acho que algumas áreas do cacau não diferenciam maiúsculas de minúsculas, e provavelmente carregar um xib é uma dessas áreas. Então, acabei de renomeá-lo para DefaultView e tudo está bem agora.
fonte
selecione o proprietário dos arquivos e abra o inspetor de identidade, fornecendo o nome da classe a que corresponde. Se nenhum dos métodos acima funcionar e você ainda não conseguir ver a saída de exibição, dê uma nova conexão de referência ao proprietário do arquivo e poderá ver a saída de exibição. Clique na visualização Outlet para fazer uma conexão entre o View Outlet e o proprietário do arquivo. Execute o aplicativo, isso funciona bem.
fonte
No meu caso, a visualização não foi visualizada no xib. no xib, a visualização era size = none (quarta guia à direita). Defino o tamanho para Forma livre e recarrego o xCode. A vista foi apelada e eu configurei o link adequado para Ver.
fonte
Se você já tentou de tudo e ainda assim obtém esse erro, tente recriar o arquivo de classe do zero, mas lembre-se de marcar a caixa de seleção "Também criar arquivo XIB". Isso vinculará automaticamente alguns itens que não estão vinculados ao criar esses arquivos separadamente. Depois que isso é criado, você provavelmente pode recortar e colar tudo no novo XIB e deve funcionar bem.
Estou encontrando esse problema especificamente ao criar arquivos separadamente no Swift.
fonte
para mim aconteceu, quando
O UIView deste ViewController deve ser carregado na outra visualização como uma subvisão,
chamaremos algo assim
Onde
Aqui o loadView estava ausente ,, a adição desta linha resolveu meu problema.
fonte
Eu tive o mesmo problema, descobri e é por isso que eu marquei " Células estáticas " nas propriedades da exibição de tabela na opção Conteúdo . Funcionou quando foi alterado para "
Dynamic Prototypes
". A captura de tela está abaixo.fonte
Eu tive um problema semelhante com o Xcode 9.3, e a configuração de "Módulo" no inspetor de atributos "Proprietário do arquivo" para o módulo do projeto corrigiu isso para mim.
fonte
Abra seu arquivo de storyboard onde seu viewController existe ou um arquivo relacionado ao XIB com textEdit.app e verifique se o nome do storyboard ou do XIB é o mesmo do seu viewController, altere-o, salve e recarregue / reinicie o Xcode.
fonte
Se você estiver usando um método init personalizado, verifique se está retornando algo válido. Corri para um pedaço de código que falhou em algo como isto:
Em outra classe, o controlador foi criado da seguinte maneira:
O problema é que, no método init, o self não mudou e deve ficar assim:
fonte
Gostaria de dizer a Stephen J. Algumas vezes, o X Code fica confuso. Acabei de ter uma experiência em que brinquei bastante com a interface do usuário e adicionei e excluí algumas tomadas várias vezes. As tomadas simplesmente não ligavam mais. Eu nunca descobri um motivo específico (tentei todas as soluções acima) e só precisei excluir o NIB e recriá-lo do zero, e na verdade tive que usar um nome diferente para o NIB antes que funcionasse. (XCode 4.6.1) Desperdiçou algumas horas com isso.
fonte