Erro "Classe desconhecida <MyClass> no arquivo do Interface Builder" em tempo de execução

260

Embora o Interface Builder esteja ciente de um MyClasserro, eu recebo um erro ao iniciar o aplicativo.

Isso acontece quando MyClassfaz parte de uma biblioteca e não acontece se eu compilar a classe diretamente no destino do aplicativo.

estremecer
fonte
Como você vincula a biblioteca?
Elise van Looij
Eu uso um subprojeto dependente e arrastei os produtos do subprojeto Xcode para a fase de construção "Link Binary With Library" do meu destino atual.
jhoule
Se a classe for do CocoaPods, isso pode ajudar o github.com/CocoaPods/CocoaPods/issues/491 .
Protocole
Pode estar relacionado? stackoverflow.com/a/24924967/511299
Sunkas

Respostas:

222

Apesar do erro " Classe desconhecida MyClass no arquivo Interface Builder. " Impresso em tempo de execução, esse problema não tem nada a ver com o Interface Builder, mas com o vinculador, que não está vinculando uma classe porque nenhum código a usa diretamente.

Quando os dados .nib (compilados a partir do .xib) são carregados em tempo de execução, MyClasssão referenciados usando uma string, mas o vinculador não analisa a funcionalidade do código, apenas a existência do código, portanto, não sabe disso. Como nenhum outro arquivo de origem faz referência a essa classe, o vinculador a otimiza para não existir ao tornar o executável. Portanto, quando o código da Apple tenta carregar essa classe, ele não consegue encontrar o código associado a ela e imprime o aviso.

Por padrão, os destinos de Objective-C terão -all_load -ObjCsinalizadores definidos por padrão, que manterão todos os símbolos. Mas eu tinha começado com um destino C ++ e não tinha isso. No entanto, encontrei uma maneira de contornar isso, que mantém o vinculador agressivo.

O hack que eu estava usando originalmente era adicionar uma rotina estática vazia como:

+(void)_keepAtLinkTime;

que não faz nada, mas que eu chamaria uma vez, como:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

Isso forçaria o vinculador a manter toda a classe e o erro desaparecerá.

Como jlstrecker apontou nos comentários, não precisamos realmente adicionar um _keepAtLinkTimemétodo. Simplesmente chamando um existente, como:

   [MyClass class];

faz o truque (contanto que você deriva de um NSObject).

Obviamente, você pode chamar isso em qualquer local do seu código. Eu acho que pode até estar em código inacessível. A idéia é enganar o vinculador a pensar que MyClassé usado em algum lugar para que não seja tão agressivo na otimização.

Xcode 6.3.2 e Swift 1.2

Rápida definição de visão. Certifique-se de substituir init(coder aDecoder: NSCoder). Objective-C definição de controlador de exibição. E uma ponta em uma pereira.

Adicione o nome do módulo ao inspetor de detalhes da ponta onde você escolhe sua classe.

jhoule
fonte
2
Os dados .xib não são carregados no tempo de execução. O compilador IB compila o xib em uma ponta; a ponta é o que é carregado no tempo de execução.
31511 Peter Hosey
19
Você não precisa modificar MyClass. Basta chamar um método do qual herda NSObject, como +class.
Jlstrecker
10
Embora não houvesse Xcode 4 quando a pergunta original foi publicada, o seguinte ainda parece ser apropriado. No Xcode 4, em vez de adicionar algum método fictício para eliminar o erro, você pode verificar todos os destinos necessários MyClass.mna seção Associação ao Destino do Inspetor de Arquivos.
Adubr
51
Outra possibilidade atualmente é que MyClass.m pode não estar na fase de criação de fontes de compilação. Isso pode acontecer se você arrastar MyClass.h / m para o seu projeto, em vez de criá-los usando Novo arquivo.
Steven Fisher
6
@ JoshBruce, você pode explicar a solução Swift? Eu realmente não entendo isso.
Ryan Bobrowski
183

Corrigi isso de acordo com o que Laura sugeriu, mas não precisei recriar os arquivos.

  • Usando o XCode 4, no Project Navigator , selecione o arquivo .m que contém a classe da qual está reclamando

  • Vá em Exibir-> Utilitários-> Mostrar Inspetor de Arquivos
    (isso mostrará o Inspetor de Arquivos à direita, com as informações do arquivo .m)

  • Abra a seção Associação ao destino e verifique se o seu destino está selecionado para este arquivo .m

Quando adicionei meu arquivo .m ao meu projeto, ele não foi adicionado ao meu destino padrão por algum motivo e isso causou o erro que você mencionou.

Pat
fonte
É verdade que, às vezes, o erro do vinculador ocorre simplesmente porque não compila seu arquivo no seu destino. O que você descreve é ​​a maneira de controlar o (s) destino (s) ao qual um arquivo está associado. Infelizmente, meu arquivo já fazia parte do meu destino, mas eu ainda tinha um problema de link. Provavelmente, devido à minha biblioteca ser C ++ (em oposição ao Objective-C), que possui diferentes sinalizadores de vinculador padrão (consulte as postagens de Alasdair Allan e Sijo acima).
Jhoule 25/08
5
Essa sugestão funcionou para mim, embora de maneira um pouco diferente, já que minha caixa de seleção "Associação de destino" já estava marcada. Desmarquei e recriei, mas a mensagem de erro mudou para indicar o meu novo nome de classe. Verificando novamente a caixa e construindo novamente, tudo agora funciona. Muito mais fácil do que excluir arquivos de cache!
electromaggot
Ótima solução via Xcode UI. @electromaggot, o Xcode pode ficar confuso quando você adiciona classes manualmente, portanto, pode ser necessário adicionar mais de um arquivo.
21712
Esta é uma solução para mim também. Eu havia arrastado alguns arquivos de classe de outro projeto, e foram esses arquivos que geraram a exceção.
hairbo
1
Excluí um arquivo do meu projeto, em seguida, adicionei o mesmo arquivo mais tarde e isso resolveu o problema.
MindSpiker
70

Isso realmente não tem nada a ver com o Interface Builder, o que está acontecendo aqui é que os símbolos não estão sendo carregados da sua biblioteca estática pelo Xcode. Para resolver esse problema, você precisa adicionar os -all_load -ObjCsinalizadores à Other Linker Flagschave das configurações de compilação do projeto (e possivelmente do destino).

Como o Objective-C gera apenas um símbolo por classe, devemos forçar o vinculador a carregar os membros da classe também usando o sinalizador -ObjC e também forçar a inclusão de todos os nossos objetos da nossa biblioteca estática adicionando o -all_loadsinalizador do vinculador. Se você pular esses sinalizadores mais cedo ou mais tarde, você encontrará o erro unrecognized selectorou obterá outras exceções, como a que você observou aqui.

Alasdair Allan
fonte
5
Descobri que apenas a -ObjCbandeira o consertava no meu caso.
Kekoa
5
@Kekoa, isso ocorre porque sua versão do Xcode (LLVM) é mais recente do que o cara que escreveu esta resposta. Atualmente, o uso -ObjCé bom o suficiente para corrigir o problema.
Até
isso só me ajudou. Durante a compilação, ele mostrou os problemas relacionados à estrutura necessários, que também foram resolvidos após a importação de todas as estruturas.
Vaibhav Saran
-ObjC sinalizador sozinho corrigiu meu problema. Na verdade, eu recebi um erro por ter o atributo all_load no iOS7.
Sushma Satish
Usar -all_load -ObjC pode causar aumento desnecessário no tamanho do produto. esse problema ocorre com os arquivos de categoria também apenas nas estruturas.
Ali Amin
26

Encontrei esse problema hoje usando o Swift.

Eu mudei uma classe Model.h + Model.mpara a Model.swift. Este objeto foi usado no Interface Builder com o class = Model.

Assim que substituí o objeto, a classe não pode mais ser carregada.

O que eu tive que fazer foi mudar a referência de classe no IB de:

Class = Model
Module = 

para

Class = Model
Module = <TARGETNAME>

Você encontrará as <TARGETNAME>configurações de compilação. É também o nome que aparece no seu Swift-Header gerado:#import "TARGETNAME-Swift.h"

Besi
fonte
1
Esta parece ser a resposta correta. A menos que alguém possa dizer o contrário, isso deve ser marcado como correto.
Bjørn Ruthberg
1
Ótima resposta, obrigado. Para mim, o Modulenome estava ali no menu suspenso. Era o nome do meu aplicativo.
ChrisH
Funciona para mim. Para o meu problema, o <TARGETNAME> mencionado na sua resposta é o nome da estrutura que contém a classe.
Tyler Longo
Cheguei à conclusão por conta própria, esse também foi o erro que estava ocorrendo e estava disposto a postar minhas descobertas quando vi sua postagem. Na verdade, eu vi, mas passei por causa das muitas respostas e do barulho ao seu redor. Acho que sua resposta poderia ser melhorada com algumas capturas de tela para diferenciar sua resposta das outras. Eu certamente pegaria se fosse assim. Muito obrigado, de qualquer maneira, por postá-lo aqui. Você recebeu meu voto.
jvarela
Para o AppDelegate, eu pude corrigir isso na interface do Interface Builder. Para a classe personalizada de um elemento da interface do usuário em uma janela, a interface do Interface Builder não me permite definir a classe e o módulo personalizados. Eu tive que fazer o seguinte: (1) Abra o arquivo .xib como "Código-fonte" (clique com o botão direito do mouse). (2) Adicione o atributo "customModule = <TARGETNAME>" ao lado do atributo customClass.
Poulsbo
20

Vá para o "ProjectName", clique nele e, em seguida, vá na guia "Fases de construção" e, em seguida, clique em "compilar fontes" e, em seguida, clique no botão "+", uma janela aparecerá e escolha "MyClass". m "e clique em" adicionar ",

Construa o projeto e execute-o, o problema certamente será resolvido

Subbu
fonte
Sim, eu não tinha marcado TODAS as caixas de destino que eu queria adicionar às minhas classes importadas recentemente. Obrigado!
Joel Balmer
Sim! Meu arquivo VC estava ausente no projeto Target.
Sebastian Dwornik
19

É um problema de cache do Xcode4, basta excluir todas as pastas em / Usuários / seu_usuário / Biblioteca / Suporte a aplicativos / iPhone Simulator / 4.3 / Aplicativos /

Além disso, se você tiver o mesmo problema de teste no seu iPhone, exclua o aplicativo antigo antes de executá-lo ...

Boa sorte. Pascual

Ignacio Pascual
fonte
8
Nas Configurações de criação do projeto, você precisa adicionar os sinalizadores "-all_load -ObjC" à chave "Outros sinalizadores de vinculador". Este não é um problema específico do Xcode 4 e, de fato, geralmente também não tem nada a ver com o Interface Builder.
Alasdair Allan
Essa solução já foi sugerida em janeiro de 2010 (veja acima).
Jhoule
6
Sim - a maneira mais fácil de fazer isso é simplesmente abrir o iOS Simulator e, no menu, escolher 'Redefinir conteúdo e configurações'
RanLearns
Ou você pode fazer o que eu fiz e apenas excluir o aplicativo em questão da tela inicial do Simulador. Eu tinha a mesma mensagem de erro, mas estava fazendo referência a um representante de aplicativo antigo.
spstanley
16

Às vezes, o IBuilder perdia customModule="AppName" customModuleProvider="target"

Para corrigi-lo, abra o storyboard como código-fonte e substitua esta linha:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

para isso:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
ChikabuZ
fonte
O uso do Xcode 6.3 (6D570) assim que executo a configuração volta ao original (ruim). Erro? Estou tentando incluir um arquivo rápido em um projeto de Objective C.
addzo
No XCode 6.4, apenas a adição de customModuleProvider = "target" no código-fonte do storyboard, no controlador de exibição desejado, corrigiu o problema.
Amro Shafie
Consegui resolver meu problema com apenas customModule="MyFrameworkName". +10
Stan
Na verdade, meu problema era o contrário, eu queria excluir o CustomTaget, mas o Xcode não estava alterando o arquivo de origem xib. Portanto, tive que excluir customModule = "AppName" customModuleProvider = "target" para fazê-lo funcionar.
Adriana
14

Meu caso - Ao tentar usar uma classe de uma estrutura rápida no meu projeto de objetivo c, recebi esse erro. A solução foi adicionar o módulo (estrutura rápida) da classe no Interface builder / Storyboard, como mostrado abaixo. Nada mais

insira a descrição da imagem aqui

Dhilip
fonte
2
Estou usando uma estrutura Swift no projeto Swift instalado pelo CocoaPods. Este método funciona. E o nome do módulo é o nome da estrutura.
JSW
1
Isso funciona perfeitamente. Precisa por que esse módulo é removido?
precisa saber é o seguinte
Funciona perfeito com problemas de estruturas de cocoapod ... parabéns a você por uma resposta perfeita ...
jayant rawat 06/03
13

Vá para Build Phases-> Compile Sources e adicione seus novos arquivos .m.

Jackie Lee
fonte
Sim, depois de adicionar novos arquivos de um projeto anterior em um projeto XCode 4.5, adicionar os arquivos .m à lista Fontes de Compilação fez com certeza. Adicionar "-all_load -ObjC" não funcionou no meu caso, mas não doeu.
whyoz
13

No meu caso, estava mostrando um erro para uma classe que nem existia! Eu suspeitava que isso fosse algo que foi divulgado no arquivo do storyboard. Se você não reconhecer o arquivo de classe no erro, tente o seguinte:

1) abra seu projeto em sublime ou outro bom editor. Procure a classe a que se refere. 2) remova a parte inteira que diz

customClass="UnrecognizedClassName"

3) salve-o. 4) retorne ao xcode e limpe o projeto e tente executá-lo agora.

trabalhou para mim.

insira a descrição da imagem aqui

smileBot
fonte
Eu uso o aplicativo OSX TextEdit. Funcionou bem para esta operação. Certifique-se de fechar seu projeto primeiro e fechar o Xcode.
TJ
Isso também ajudou. Eu tinha mais de um objeto com a mesma classe personalizada, provavelmente cliquei na visualização em vez do controlador e atribuí o mesmo nome.
precisa
1
Essa também foi a solução para o problema que encontrei; Eu já havia inserido um nome de classe parcial e, de alguma forma, o storyboard foi salvo dessa maneira (por exemplo customClass="MyCla"). Em vez de excluir a tarefa de classe personalizada, era prudente eu simplesmente colocar a classe que pretendia usar em primeiro lugar :) #
1010 dave
9

Eu só quero adicionar esta resposta, já que a maioria, se não todas as respostas aqui, assumem que a classe realmente existe .. é apenas que o vinculador / compilador é burro demais para vê-lo .. assim as respostas giram em torno de alertar o vinculador para a existência da classe ou criando um hack para 'forçar' existe.

meu problema acontece quando esta mensagem está realmente falando de uma classe inexistente. Portanto, um exemplo seria eu voltando a uma revisão antiga do git que não tem conhecimento de uma determinada classe. No entanto, o compilador reclama que a referida classe não ' não existe ..

solução?

  • Nuke a coisa toda! primeiro exclua todos os arquivos de compilação etc. excluindo todo o conteúdo deste diretório ~ / Library / Developer / Xcode / DerivedData
  • exclua o aplicativo do próprio telefone (e limpe o conteúdo do simulador se estiver usando um simulador)

você deve estar pronto para ir depois disso

abbood
fonte
2
Não é possível marcar com +1 este o suficiente, corrigi o meu problema. Meu problema foi exatamente o mesmo em que o arquivo já havia sido excluído, mas o aviso ainda aparecia quando compilado.
Brett
No Storyboard, você deve preencher o Identificador. Às vezes, eu o escrevo no campo "Classe" (no Identity Inspector) por engano. Portanto, o compilador está reclamando com um motivo pelo qual a classe não existe!
23714 Vincent Vincent
9

A melhor maneira de remover o erro é: 1) Selecione o arquivo de classe (.m) 2) Em " Associação de destino ", "marque" a entrada de nome do projeto

Amit B
fonte
Isso funciona. Eu estava desenvolvendo um pod e, por algum motivo, o comando pod install estava aplicando o destino errado a um arquivo de classe específico. Ele estava sendo aplicado a um pacote de recursos que eu tinha. A configuração correta é Pods- <project-title> - <pod-title>
krosullivan
Isso não funciona para mim. A associação de destino está correta, mas o erro continua ocorrendo.
Kokodoko
8

Corrigi isso copiando o texto das minhas classes.h e .m, excluindo esses arquivos de classe do projeto e criando novos arquivos de classe.h e .m com o mesmo nome usando "Adicionar arquivo". Depois colei o código novamente nos novos arquivos e tudo funcionou muito bem. De alguma forma, os arquivos não foram vinculados corretamente quando foram criados. Não precisei usar nenhum sinalizador de vinculador depois disso.

Laura
fonte
1
quando criei os arquivos, não tinha um .m no final. Tentei renomear o arquivo e adicioná-lo novamente, no entanto, ainda era necessário excluir e recriar o arquivo antes que o xcode estivesse feliz.
odyth
Seu arquivo provavelmente não fazia parte do seu destino. Re-adicioná-lo provavelmente acabou com uma caixa de seleção padrão no destino adequado.
Jhoule 25/08
1
Essa solução também funcionou para mim, mas eu tive 100% de certeza de que, antes de excluir a primeira classe (.h + .m), verifiquei se fazia parte do meu destino. Esse não foi o problema para mim. Como Laura, eu apenas apaguei a classe e a fiz novamente (com um nome diferente), e funcionou bem, sem nenhuma das outras soluções nesta página.
Nate
7

Eu finalmente consertei isso, esqueci de adicionar o seguinte código ao meu arquivo .m:

@implementation MyTableViewCell

@end

Portanto, isso estava sendo causado porque eu criei um espaço reservado @interface para a célula da minha tabela, que tinha uma conexão com um elemento no arquivo .xib, mas há um erro no Interface Builder em que, se nenhuma implementação for especificada para uma classe, não pode encontrá-lo.

Eu havia passado por todas as etapas de outros fóruns, visualizando o .xib como fonte e vendo o MyTableViewCell, apesar de ter comentado isso fora do meu código. Eu tentei redefinir o simulador. Eu até tentei dividir todas as minhas classes em arquivos separados com o mesmo nome das interfaces, mas nada funcionou até isso.

PS: na minha experiência, não importa se os nomes dos arquivos .h / .m são diferentes dos nomes da interface @. Eu tenho vários arquivos contendo mais de um @interface e eles funcionam bem.

PPS Tenho uma explicação mais detalhada sobre por que UITableViewCell e UICollectionViewCell causam esse erro em https://stackoverflow.com/a/22797318/539149, juntamente com como revelá-lo em tempo de compilação usando registerClass: forCellWithReuseIdentifier :.

Zack Morris
fonte
6

Isso acontece porque o .xib possui um link obsoleto para o antigo App Delegate, que não existe mais. Corrigi assim:

  • Clique com o botão direito do mouse em .xib e selecione Abrir como> Código-fonte
  • Nesse arquivo, pesquise o antigo delegado do aplicativo e substitua-o pelo novo
SB
fonte
Abrir como código-fonte não existe mais, mas você pode facilmente clicar com o botão direito do mouse em Show in Finder, clicar com o botão direito do mouse no arquivo e abrir no TextEdit. Claro, fazer backup do arquivo antes de fazer quaisquer alterações;)
Scott Allen
6

basta adicionar o código abaixo no início do método appdelegate applicatoindidfinishlanching, então ele funcionará bem

[classe da minha classe];

iSpark
fonte
5

Eu tentei essas e outras respostas listadas neste site, nenhuma das quais classificou para mim. Esses comentários (em http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html ) ajudaram:

Depois de pesquisar e pesquisar e pesquisar, finalmente descobri o nome dessa classe excluída oculta em um arquivo. Eu tive que abrir os arquivos do construtor de interface no código X, clicando com o botão direito do mouse neles e escolhendo 'visualizar como código fonte'. Então, procurando por ele surgiu

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

Simplesmente remover a última linha não o corrige infelizmente, reclamando que há um número errado de itens no arquivo. Você precisa remover a linha correspondente na seção de linhas acima, à qual se refere CustomClass.

user776904
fonte
5

No meu caso, eu tenho o XCode6, o arquivo .m da classe especificado acaba no local errado na fase de construção - deveria estar em Fontes de Compilação , mas no arquivoCopiar recursos do pacote

Sean Dong
fonte
Graças a você eu comecei a olhar para a lista e descobri que meu arquivo estava faltando, provavelmente quando eu o criei eu não definir os alvos corretos
schmru
4

Esse problema parece não estar desatualizado.

Eu tive o mesmo problema com o Xcode 8 e resolvi-o de forma semelhante ao smilebot :

  1. Abra seu arquivo de storyboard como "Código-fonte" no Xcode:

  2. Pesquise a classe a que se refere e remova a parte inteira que diz

customClass = "UnrecognizedClassName"

  1. Abra seu arquivo de storyboard como "interfacebuilder - storyboard" novamente e recrie seu aplicativo.
jaymgee
fonte
3

Basta remover o MyClass.m e. He adicioná-los ao projeto novamente, é um trabalho para mim.

yebw
fonte
3

Eu tinha 'Classe desconhecida favouritesButton no arquivo Interface Builder' e o localizei em uma cena de livro de histórias em que o botão em questão tinha uma classe personalizada falsa de "favouritesButton" no campo Classe na parte superior do Identity Inspector. Eu pretendia colocar esse valor no próximo campo: Identity Label.

Alterar isso para "UIButton" resolveu o problema.

Paul Finger
fonte
2

Eu me deparei com isso em Swift.

Mover o arquivo .xib para a pasta Base.lproj do projeto se livrou desse erro.

jaime
fonte
Obrigado por compartilhar isso, mas não resolveu meu problema. Aqui está a solução que eu finalmente encontrei: stackoverflow.com/a/28760089/456434
Mazyod
2
Eu também tive esse problema. Mas, no meu caso, o nome do módulo ausente era o problema: Consulte < stackoverflow.com/a/29013058/784318 >
Besi
1

Hoje, ocorreu esse erro ao converter meu aplicativo aaLuminate para Universal no Xcode 4. Esse aplicativo é baseado no modelo de utilitário e foi originalmente construído no Xcode 3.

Para economizar tempo, copiei as Visualizações principal e Flipside do iPhone para nomes apropriados no aplicativo Universal. Eu experimentei o erro "Classe desconhecida x no arquivo do Interface Builder". No meu caso, não havia nada nos arquivos ou destinos XIB.

Também copiei o arquivo aaLuminate-Info.plist por outros motivos - isso tinha uma chave antiga "Nome principal da base do arquivo da ponta" definida como MainWindow.

Assim que eu apaguei essa chave, ela corrigiu o problema!

aarthur
fonte
1

No meu caso, recebi esse erro porque havia tentado salvar algum trabalho criando um novo projeto e, em seguida, excluindo vários arquivos de origem e copiando os arquivos de origem com o mesmo nome do projeto em funcionamento. Também copiei meu arquivo MainStoryBoard, que estava procurando meu RootViewController. No entanto, quando excluí o RootViewController original e o adicionei no RootViewController do produto anterior, evidentemente a operação Adicionar Arquivos falhou ao "marcar" a caixa de destino, conforme sugerido acima. Ao visitar todos os arquivos ".m" importados da newley e verificar se a caixa de associação de destino estava marcada, tudo estava bem. Acho que o que estava acontecendo era que o arquivo do storyboard procurava uma classe que havia sido "excluída" do link porque a associação de destino estava desmarcada. Assegurar que os arquivos necessários para o destino sejam designados na associação de destino no inspetor de arquivos. Obrigado Pat! (Veja acima)

Don
fonte
1

No meu caso, foi porque eu declarei uma subclasse de uma subclasse de uma célula UITableView no arquivo .h (a declaração de ambas as subclasses estava no mesmo arquivo .h), mas esqueci de fazer uma implementação vazia dessa segunda subclasse no arquivo .m.

não se esqueça de implementar qualquer subclasse de uma subclasse que você declara no arquivo .h! Parece simples, mas fácil de esquecer, porque o Xcode fará isso por você se você estiver trabalhando com uma classe por arquivo .h / .m.

ferradura7
fonte
1

Eu tinha "Classe desconhecida RateView no Interface Builder", em que RateView era uma subclasse do UIView. Eu soltei um UIView na minha cena do Storyboard e alterei o campo Classe personalizada para RateView. Ainda assim, esse erro apareceu.

Para depurar, alterei o nome da minha classe para RateView2 e alterei todas as referências para corresponder, exceto o campo Classe personalizada do UIView. A mensagem de erro ainda apareceu como antes com o RateView como a classe ausente. Isso confirmou que a mensagem de erro estava relacionada ao valor do campo Classe personalizada. Alterei esse valor para RateView2 e a mensagem de erro foi alterada para "Classe desconhecida RateView2 no Interface Builder". Progresso das sortes.

Por fim, inspecionei os arquivos do código-fonte no Inspetor de Arquivos. Lá, descobri que o arquivo de código-fonte (copiado de um tutorial) não estava associado ao meu Target. Em outras palavras, não possuía associação de destino. Marquei a caixa que fazia do arquivo de código-fonte da classe um membro do aplicativo de destino e a mensagem de erro desapareceu.

Robert White
fonte
1

No meu caso, excluí uma classe chamada "viewController" sem perceber que ela foi selecionada com o inspetor de identidade do storyboard (em 'Classe personalizada' na parte superior).

Você apenas precisa selecionar a classe correta para o controlador de exibição no campo Classe personalizada do seu inspetor de identidade ou adicionar uma nova classe ao seu projeto e selecionar essa como sua Classe personalizada.

Trabalhou para mim!

Tim
fonte
1

Isso me deixou louco por um tempo e nenhuma das sugestões acima me ajudou a me livrar do erro. Felizmente, eu só tinha um objeto IB usando a classe, então apenas o excluí e o adicionei novamente com a mesma classe especificada. Erro desapareceu ...

Jdizzle Foshizzle
fonte