“Não foi possível encontrar nenhuma informação para a classe chamada ViewController”


154

Este bug está me deixando louco desde que comecei a usar o Xcode (4.6.3). Sempre que tento vincular um item do Storyboard ao meu código, recebo o erro:

Não foi possível encontrar nenhuma informação para a classe chamada ViewController.

Isso acontece também com classes personalizadas. Eu tentei métodos como:

  • Excluindo os dados do delegado.
  • Removendo e adicionando novamente as classes.
  • Reiniciando o Xcode.
  • Reinstalando o Xcode.

Não consigo pressionar a tecla Ctrl e arrastar para criar conexões em nenhum dos meus projetos, independentemente da classe. O mesmo problema ocorre com um aplicativo de modelo totalmente novo. Se eu digitar o código manualmente e pressionar a tecla Ctrl e arrastar, posso estabelecer uma conexão funcional, mas não posso adicioná-lo automaticamente. Nada do que consegui encontrar até agora na Internet ajudou. Alguma dica?


Você tem certeza de que o arquivo .m do ViewController está incluído no destino apropriado? (caixa no painel do lado direito inspector)
Alfie Hanssen

2
Você tem um controlador de exibição no storyboard e especificou "ViewController" para o nome da classe que deve ser instanciada para gerenciar a exibição. Verifique cada controlador de exibição no storyboard: selecione o controlador de exibição, observe o "inspetor de identidade" no painel direito e a propriedade "Classe personalizada". Se aparecer "ViewController", então há seu problema. Coloque o nome da classe que deve gerenciar seu controlador de exibição ... ou coloque UIViewController para obter a implementação padrão do UIKit.
22613 Nicholas Hart

1
Alterei a classe personalizada para "UIViewController" no inspetor de identidade e não consegui mais arrastar a tecla Ctrl do storyboard para ViewController.h. Se eu criar uma nova classe e tentar arrastá-la com a tecla Ctrl pressionada (depois de definir a classe do controlador de exibição adequadamente), recebo o mesmo erro "Não foi possível encontrar nenhuma informação".
user2597451

4
Eu tive esse problema e a modificação da classe ViewController gerada automaticamente funcionou para mim. Por exemplo, basta adicionar um NSLog()paraviewDidLoad:
jb

Respostas:


292

O que resolveu esse problema para mim foi realmente excluir a classe do projeto.

Passos:

  1. No explorador de arquivos do projeto (painel esquerdo), localize a classe e clique com o botão direito do mouse -> Excluir
  2. Remover referência (não vá para o lixo, pois você perderá a aula para sempre)
  3. Clique com o botão direito do mouse na pasta que continha a classe -> Adicionar arquivos ao ...
  4. Encontre a classe que você acabou de excluir no sistema de arquivos

Isso parece forçar o Xcode a vincular a classe de volta ao storyboard.

Nota: para mim, o seguinte não funcionou:

  • Fechando o Xcode
  • Limpando o projeto
  • Excluindo o nome da turma do storyboard e inserindo-o novamente

Eu acho que isso é um bug da parte da Apple


8
Eu tentei isso, mas não funcionou para mim / -: mesmo erro.
Michael Michael

1
@ Michael, Sim, agora estou em uma situação em que nenhuma das opções acima funciona. Xcode é um ***
Chris Harrison

5
Esse problema data de julho de 2013. Atualmente, em maio de 2016, recebo o mesmo bug e o corrigi com esta resposta. Como é que, em tantos anos, a Apple não corrige isso definitivamente?
SkyWalker 5/05

3
Não posso acreditar que isso ainda é um problema. Só tinha que fazer isso no XCode 8.1 ..
fisk 14/11

2
2017 (Versão 8.2 (8C38)) e ainda vivo, o Xcode SUCKS. Acontece-me quando você copiar e colar equipe UI do storyboard de uma cena para outra
Jaime Agudo

135

Caso alguém ainda esteja frustrado com isso, há um truque para fazer as coisas funcionarem.

O que faço é inserir manualmente uma saída na minha classe, por exemplo @IBOutlet weak var someView: UIView!:, e arrastar do código para a exibição no IB ou no storyboard. Depois disso, consigo arrastar do IB / Storyboard para a minha turma para fazer conexões, os editores assistentes reconhecem a turma em "Automático", etc ...

Funciona sempre.


6
@ Gmeister4, se você criar uma saída no seu código, ele mostrará um pequeno círculo à esquerda da saída. Clique e arraste desse círculo para a exibição no IB ou Storyboard para fazer sua conexão.
Andrew Robinson

4
Mais fácil que a resposta principal. +1
cph2117

2
Ainda não é possível fazê-lo da maneira correta, nem mesmo depois disso - mas pelo menos isso funciona!
Alexandre G

1
Nenhuma das respostas acima funcionou para mim. Somente essa resposta funcionou para mim.
Coolcool1994 23/05

1
Incrível, é isso!
Sam

38

Para mim, removê-los da sua associação de destino na coluna da direita e adicioná-los novamente fez o truque insira a descrição da imagem aqui


Isso também funcionou de mim. Eu havia duplicado a classe ViewController.swift, e essa parece ser a solução.
UberJames

Eu acho que é um bug do Xcode que ainda existem no Xcode 8.0
jiangjiefs

Isso aconteceu agora comigo no Xcode 8.3.3 e sua solução é a mais simples e funciona. Então obrigado !!!
precisa saber é o seguinte

Ainda existe no Xcode 11.5 (quero dizer seriamente a Apple ??). Única solução que funcionou para mim listada aqui.
Christophe Fondacci

12

Em algum momento, o Xcode ocorre devido ao VC não referenciar o arquivo de classe. A solução simples para isso é:

escreva a propriedade manualmente, conforme indicado.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Isso criará um sinal de link vazio antes do @IBOutlet , abra seu projeto no editor assistente, clique em sinal de link insira a descrição da imagem aquie arraste para a Visualização que você deseja conectar (eu conectei com o TableView). e é isso. Desfrute de codificação feliz !!!


8

Acabei de ter esse problema em abril de 2017 com o Xcode 8

Basta criar uma saída através do código e compilar a solução. por exemplo:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Você tem que amar o Xcode…

Edit: Ainda acontecendo no Xcode 9


7

os seguintes passos funciona para mim espero que funcione para você também

1- Você precisa reabrir seu projeto depois de fechar o Xcode.

2- Aguarde a indexação dos arquivos do projeto

3- Verifique se funciona ou não

4- Se ainda não estiver funcionando, siga o passo 5, se não estiver feliz por você :)

5- Limpe e construa o objetivo do seu projeto

insira a descrição da imagem aqui


7

Eu tentei de tudo e não funcionou, então para mim o que funcionou é:

  • Limpe a pasta e o projeto de compilação.
  • Projetos abertos (Janela -> Projetos)
  • Encontre seu projeto na lista e exclua os Dados Derivados
  • Fechar Xcode
  • Reinicie o computador (sem optar por reabrir as janelas abertas)
  • execute o Xcode
  • Trabalhos!

Todos os meus controladores de exibição não estavam sendo reconhecidos; portanto, excluir todos os arquivos e adicionar novamente não era uma opção, pois esse é um grande projeto.


4

Para mim, o seguinte funcionou:

  1. Faça uma 'limpeza' e uma 'limpeza de pasta de construção' (pressione 'opção' no menu Produto para obter o comando 'limpeza de pasta de construção'

  2. Stop Xcode

  3. No terminal, vá para a pasta de dados derivados:

    (/ Usuários // Biblioteca / Desenvolvedor / Xcode / DerivedData)

Exclua o diretório de dados derivado do seu projeto.

  1. Onda de frango morto no ar

  2. Iniciar o Xcode


3

Eu tive que fazer uma combinação de algumas das respostas até agora:

  1. Remova o nome da classe personalizada do storyboard.

(Clique no botão amarelo no canto superior esquerdo do controlador de exibição no storyboard -> vá para o inspetor de identidade (opção + comando + 3) -> exclua o nome da classe personalizada na parte superior)

  1. Remova a referência ao arquivo do controlador de exibição.

(Clique com o botão direito do mouse no arquivo -> excluir -> remover referência)

  1. Adicione o arquivo do controlador de exibição novamente ao projeto.

(Clique com o botão direito do mouse na pasta em que o arquivo estava -> "Adicionar arquivo ao [projeto]")

  1. Adicione o nome da classe personalizada de volta ao storyboard.

3

Se as pessoas tentam o que precede e as coisas ainda não estão funcionando, o truque estranho que funcionou para mim foi adicionar a saída em um pedaço de espaço em branco. Funciona se não houver outras linhas diretamente acima ou abaixo da linha que você está adicionando. Estranho, mas funcionou!


3

O que funcionou para mim foi, em vez de arrastar a conexão do botão para o código, foi:

  1. Clicando no item do storyboard desejado.
  2. Abrindo o inspetor de conexões (painel direito)
  3. Arrastando do círculo + para a área do código. Igual a:

depois que vinculei meu código dessa maneira, ele funcionou normalmente a partir de então.


3

Fique no alvo!

Eu estava adicionando uma nova classe com um Xib e comecei a ver esse problema e passei um bom tempo analisando as respostas aqui e vendo se alguma delas fazia alguma diferença.

Por acaso, tenho vários destinos no meu espaço de trabalho e geralmente tenho que alternar entre eles.

Acontece que adicionar novos arquivos iniciará um re-índice no Xcode. Mas se você estiver apontando para o alvo errado, a indexação provavelmente não terá sentido e, durante o arrastar para conectar o Xcode, não será possível encontrar sua classe.

Em resumo

Passo 1.

Seleção de destino

Verifique se o destino correto foi definido para que a indexação faça sentido.


3

Isso funcionou para mim:

  1. Execute ' Clean build folder '
    (mantenha pressionada a tecla 'option' e vá para o menu " Product " para acessá-lo.
  2. Execute um simples "Limpar" (CMD-SHIFT-K) no menu " Produto ".
  3. Crie o projeto para permitir que o Xcode compile os arquivos. Além disso, deixe indexar arquivos, se necessário.

Em uma nota lateral, não tenho certeza se isso ajudou, mas também excluí os dados derivados antes de executar as etapas acima (preferências do Xcode> Localizações)


2

Selecione o ViewController no storyBoard, exclua o valor atual no painel do lado direito / "Classe do cliente" / "classe" e adicione novamente a classe de controle (digite: "SampleViewController" ...), digite. -> Isso funciona para mim


2

Eu tentei todas essas respostas, o problema para mim estava relacionado ao Xcode não poder indexar os arquivos. Corrigi isso simplesmente saindo do Xcode e reabrindo o projeto. Claro que fiz isso depois de tentar todas as soluções acima: p


2

Produto> Clean (Command - Shift - K) consertou para mim!


2

Esta é a etapa MAIS FÁCIL que fiz para corrigir esse problema.

  1. Eu limpo o projeto
  2. Arraste um novo botão no controlador de exibição.
  3. Crie o projeto.
  4. Conecte o botão recém-arrastado à classe (tomada ou ação).
  5. Então voila !!! Agora, outras tomadas podem ser conectadas à classe novamente!

1

Como minha experiência de teste, se você excluir uma classe associada ao Xcode e adicionar o arquivo novamente, esse problema ocorrerá.


1

Normalmente, quando isso acontece comigo, ainda não salvei o código da classe. Basta acessar o código e pressionar cmd + s, que geralmente corrige o problema da maneira certa.



1

Nenhuma das etapas acima funcionou para mim, mas acho que posso ter descoberto o problema. Pelo menos é o que funcionou para mim e não é um bug no Xcode.

Quando estiver no editor assistente, observe a parte superior da janela que possui o código para o seu viewController. A terceira opção à direita provavelmente diz "Manual", mas deve dizer "Automático". Depois que eu mudei isso, o problema foi resolvido!


1

Eu estava tendo um problema semelhante: "Não foi possível encontrar uma classe chamada ..." e a causa foi estúpida da minha parte, depois que eu descobri. Verifique se não está arrastando do item para a interface - verifique se está sendo arrastado para a própria classe


1

Eu tentei TUDO!

Verifique se o nome da classe do seu UIViewController não contém a palavra "Teste"

Relatório de bug enviado.


Definitivamente não estou dizendo que esta é a única causa. Só que isso é outra coisa para estar ciente.
Aaron Kreipe

Ajuda para mim excluir todos os dados derivados, projeto limpo. Mas isso é bug e você está certo.
Genevios

0

Eu tentaria refazer os arquivos .m e .h em questão e fornecer um nome original, não genérico como "ViewController". Tente algo mais parecido com o que você deseja que esse arquivo faça e termine em View Controller (por exemplo, "PizzaDecoraterViewController")

Em seguida, selecione o ViewController que você deseja conectar a esses arquivos. Certifique-se de selecionar o ViewController, não apenas um objeto. Clique na barra preta na parte inferior (aquela que possui os ícones "Primeiro respondedor" e "Sair"). O ViewController inteiro deve ser azul. Em seguida, vá para a seção Classe personalizada no Inspetor de identidade e você verá um "UIViewController" acinzentado no primeiro campo. Nesse campo, digite o nome do arquivo .h ou .m ao qual você deseja se conectar (comece a digitar PizzaDecorator ... e deve fazer uma pequena conclusão automática). Em seguida, pressione ENTER.

Ao abrir o Assistente do Editor, verifique se o arquivo que você está tentando arrastar e soltar é, de fato, o arquivo correto.

Se você fez tudo como foi dito acima, deve funcionar.


Ainda não funciona, infelizmente. Eu tentei fazer isso antes sem sucesso. Aqui está uma captura de tela: i.imgur.com/5ixtcps.png
user2597451

Hã. Estranho. Tente adicioná-los programaticamente (por exemplo, @property (nonatomic, strong) IBOutlet UIView * test;) e, em seguida, quando o pequeno círculo aparecer próximo a ele, arraste e solte no UIView.
19413 CaptJak

Isso funciona e sempre funcionou (e os aplicativos parecem funcionar bem), mas estou tentando resolver o problema que ele não adiciona automaticamente.
user2597451

Bem, se funcionar assim, deve funcionar de outra maneira. Bug no seu XCode? Tente obter uma versão anterior (como 4.6.2 ou algo assim) e instale-a. Caso contrário, ummmmmmmmmmmmmmm ...... sim ....
CaptJak

Sim, é disso que tenho medo. Desinstalar e reinstalar não está funcionando, eu esperava estar cometendo um erro. Qual é a melhor maneira de fazer o downgrade da minha cópia do Xcode?
user2597451


0

Exclua os arquivos (apenas as referências) e adicione-os novamente.


0

Bem, no meu caso, o que funcionou (é um pouco estranho, mas funcionou) é o seguinte:

Tente adicionar uma fonte de dados (por exemplo, uma extensão ao ViewController como um UITableViewDataSource). O Xcode tentará recarregar o ViewController. Depois, escrevi algum método do protocolo (no início, o Xcode não preenchia automaticamente os métodos, mas escrevia manualmente), depois adicionei o IBOutlets e, finalmente, removi a fonte de dados.

Exemplo:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

0

Para mim, a exibição para a qual eu havia especificado uma classe personalizada não estava sendo compilada pelo construtor de interface. Foi marcado @IBDesignable.

Removendo @IBDesignablee adicionando minhas saídas e marcando-a como @IBDesignableresolvido o problema no meu caso.



0

apenas tente isso

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
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.