“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?

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

Chris Harrison
fonte
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.

Andrew Robinson
fonte
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

Ruud Visser
fonte
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 !!!

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

Jesus Rodriguez
fonte
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

Amr Angry
fonte
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.

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

Joe149
fonte
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.
yndolok
fonte
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!

Elliot KG
fonte
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.

Hayden Crabb
fonte
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.

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

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

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

JohnVanDijk
fonte
2

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

Jangles
fonte
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!
user2480567
fonte
1

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

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

Delimitador
fonte
1

Só precisa limpar e recriar o projeto.

Carolina Aguilar
fonte
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!

John Nolan
fonte
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

Will Buffington
fonte
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.

Aaron Kreipe
fonte
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.

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

jomafer
fonte
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.
}
José Roberto Abreu
fonte
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.

Nick DiZazzo
fonte
0

Apenas tente excluir os dados derivados do projeto

david.gol
fonte
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 
yousuke
fonte