Atualizei para o Xcode 6 beta 4 e agora meu aplicativo trava continuamente com a mensagem
Classe X desconhecida no arquivo do Interface Builder.
Falha porque supostamente o Xcode não consegue encontrar minhas classes personalizadas que vinculei no meu Storyboard, mas mostra que elas estão vinculadas corretamente na interface do Xcode.
Estou certo de que tudo está vinculado corretamente. Minha única outra opção pode ser excluir o arquivo de storyboard inteiro e começar do zero, pois pode estar corrompido de alguma forma.
Edit: Eu também gostaria de acrescentar que tentei limpar, redefinir o simulador, mexer nas fases de construção etc. Nada disso funciona.
ios
xcode
xcode6
interface-builder
uistoryboard
Byte épico
fonte
fonte
Respostas:
Resolvi esse problema enquanto digitava a pergunta. Imaginei que responderia à minha pergunta e deixaria aqui para qualquer pessoa que possa enfrentar esse problema ao usar o Xcode 6 beta 4.
Para resolver esse problema, você precisa selecionar cada um dos seus objetos de classe personalizados no Storyboard (isso inclui qualquer exibição personalizada, até os próprios controladores de exibição personalizados).
Em seguida, com esses objetos selecionados, abra o inspetor de identidade e, em "Classe personalizada", você deverá ver a opção Módulo. Clique dentro da caixa de texto Módulo e pressione Enter.
É isso aí! O módulo atual de todos os meus objetos personalizados deve ter sido definido internamente incorretamente de alguma forma no Xcode 6 beta 4. Mas não havia indicação visual disso no inspetor.
Observe que, se pressionar Enter dentro da caixa de texto Módulo não funcionar, tente selecionar a seta à direita e selecione manualmente seu módulo atual, limpe a caixa de texto e pressione Enter. Você também pode tentar pressionar enter dentro da caixa de texto da classe (embora isso geralmente resolva um problema diferente).
Aqui está uma imagem para deixar as coisas mais claras:
fonte
@objc(...)
a uma das minhas aulas do Swift.Às vezes, o Xcode perdia
customModule="AppName" customModuleProvider="target"
Para corrigi-lo, abra o storyboard como código-fonte e substitua esta linha:
para isso:
fonte
customModuleProvider
, então o erro foi embora.customModuleProvider
que você fez por mim também, obrigado!Eu tive esse problema depois de renomear uma classe rápida. Resolvido usando a diretiva @objc:
fonte
@objc class X
e mudando para o@objc(X) class X
trabalhado.@objc()
directiva não era necessária para a classe 'original' ViewController ...Projeto com vários alvos
No meu caso, estou trabalhando no projeto com vários destinos e o problema "herdar do destino" foi desmarcado. Selecionar "herdar do destino" resolveu meu problema
fonte
Isso funcionou para mim ..
Verifique sua fonte compilada, se esse arquivo (por exemplo, ViewController.m) foi adicionado ou não, no meu caso, o arquivo ViewController não foi adicionado e, portanto, estava me dando o erro.
fonte
Compile Sources
. Esta é realmente a solução correta (e apenas) para alguns.Isso pode acontecer em qualquer Xcode acima de 6.0. Aconteceu comigo depois de renomear algumas classes do ViewController no projeto Swift (mas acho que isso também acontecerá com o Obj-C). Você só precisa abrir o construtor de interface, vá para o Identity Inspector do ViewController que teve sua classe renomeada, selecione a classe e pressione Enter. Isso reatribuirá a classe renomeada ao ViewController selecionado e também redefinirá o Valor do módulo, que será perdido após renomear a classe.
Atualização para o Xcode 8.1 (provavelmente 8.0 também):
O Xcode 8.1 apenas trava. Simplesmente e irritantemente apenas trava e não imprime nada. Eu estava perseguindo aquele acidente fantasma por uma hora apenas para descobrir que era exatamente a mesma coisa - classe não atribuída no IB. Se você estiver tendo algumas falhas fantasmas, verifique primeiro o IB quanto a classes não atribuídas.
fonte
Às vezes, o controlador que você está fornecendo perde sua associação de destino do aplicativo atual. Nesse caso, pressionar enter no campo "Módulo" não fará nada. Vá para o controlador e verifique se ele tem a associação de destino definida para o aplicativo atual.
fonte
A ativação
Inherit Module From Target
levou o módulo de destino correto. Isso resolveu o problema.fonte
Minha resposta: defina o Módulo personalizado igual ao nome do Pod personalizado (no meu exemplo - nome da classe personalizada) como na captura de tela anexada
Esta solução é para um caso específico : para visualizações personalizadas de classes da estrutura Pod (ou Carthage ).
Infraestrutura: XCode8, Swift3
fonte
Corrigi-o fazendo exatamente o oposto do que ChikabuZ sugeriu (no entanto, obrigado por apontar). No arquivo do storyboard, encontre o seguinte:
e substitua-o por este:
Não consigo acreditar quantas horas estou perdendo por contornar bugs no compilador Swift e no Xcode 6
fonte
Selecionando o apropriado
Module
para o meuCustom Class
eu resolvi este problema.Aqui está :
fonte
Eu enfrentei esse problema no Xcode 8 , para resolvê-lo, tive que modificar o storyboard no editor de texto.
Em geral, procure seu controle e remova
customModule
ecustomModuleProvider
da entidade de controle.Fez um truque para mim.
fonte
Eu tive o mesmo problema.
No meu caso, o Xcode não estava adicionando minha classe personalizada a: Target> Build Phase> Compile Sources.
Portanto, recomendo que você verifique se o seu CustomClass.m está lá.
Espero que isso ajude você.
fonte
Eu enfrentei esse problema no Xcode 6.1 quando removi
Main.storyboard
oLaunchScreen.xib
arquivo e asViewController
classes padrão do meu projeto.Corrigi-o excluindo as entradas
Launch Screen File
eMain Interface
deInfo.plist
fonte
Verifique se a sua turma tem a Associação Alvo correta .
fonte
Eu pesquisei em todo lugar por isso. Nenhuma das respostas funciona para mim até conhecer um cara que me pediu para mover minha pasta do projeto para a área de trabalho. Apenas funcionou automaticamente. Aparentemente, se você projetar uma pasta para o fundo de muitas pastas, o XCODE realmente será interrompido.
fonte
Estes passos funcionam para mim.
1) Limpar dados derivados.
2) Remova os arquivos. He.
3) Crie os arquivos. He.
fonte
Resolvi isso abrindo meu arquivo de storyboard como código-fonte e usando o comando-F para procurar minha classe desconhecida e excluir a classe personalizada associada a ela.
fonte
O que o @gfrs disse está correto, você precisa definir o Módulo. No entanto, uma vez encontrei um problema em que minha turma não estava listada no
Class
menu suspenso. Eventualmente, removi o arquivo swift, reiniciei o Xcode e recriei o arquivo. Finalmente, a turma foi listada e poderia ser usada no Storyboard.Veja também esta resposta , que parece resolver o problema 'real' que encontrei.
fonte
Resolvi esse problema digitando o nome do módulo (infelizmente, a lista suspensa não mostrará nada ...) na classe personalizada do inspetor de identidade de todos os controladores e visualizações do View.
Você também pode precisar indicar o provedor de destino. Para atingir esse objetivo, você pode abrir o storyboard no modo de código-fonte e adicionar o atributo "customModuleProvider" nos suportes ViewController e View angle.
fonte
Minha solução (Xcode 8.1 Swift 3.0):
Classe desconhecida xxx no arquivo do Interface Builder.
Abra o StoryBoard como código-fonte e procure por xxx . Remova o atributo que contém o valor xxx . Construir e executar.
fonte
customModule="" customModuleProvider=""
No meu caso, eu adicionei uma bandeira
-ObjC
paraOther Linker Flags
em configurações de projeto para que ele funcione. Também tentei com-all_load
bandeira e funcionou bem também.fonte
No meu caso, a classe mencionada no Storyboard / xib não tinha a Associação de Destino definida.
Para corrigir, forneça aos arquivos
.h
e classes.m
dessa mesma associação de destino das outras classes.fonte
Minha solução foi remover @objc da definição de classe personalizada.
fonte
Eu enfrentei o problema ao transportar o storyboard do projeto Swift para o projeto Objective-c, percebendo a resposta de vvkuznetsov , que revelou os dois projetos usando o mesmo identificador. I "Produto -> Limpar" e toque na tecla Enter no campo de texto Módulo e Classe. a questão foi embora.
fonte
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.
fonte
Meu problema foi com o erro do usuário. Eu tinha um UIView genérico no meu storyboard e na seção Custom Class do Identity Inspector, acidentalmente alterei o nome de UIView para sem sentido.
Tudo o que foi necessário para corrigir foi alterá-lo novamente para o UIView.
fonte
O que só funcionou para mim é realmente adicionar o nome do módulo ao arquivo xib ...
Então, os arquivos xib ficam assim:
Solução HORRÍVEL na minha opinião, mas é supostamente como a Apple quer que façamos isso agora.
Esta pergunta mostra três possíveis soluções de volta ao beta 4 ... aparentemente a Apple não foi muito útil nessa situação, segundo alguns, porque eles chamam de "Trabalhando como pretendido".
fonte
Eu tive o mesmo problema com o Xcode versão 6.1 (6A1052d). Acho que o problema aparece se você renomeou seu projeto App / Xcode.
Minha solução foi adicionar o nome do módulo no construtor de interface manualmente.
fonte
Eu tive esse problema depois que adicionei um novo destino e criei uma nova classe usando a caixa de diálogo 'Novo arquivo', mas falhei acidentalmente ao verificar o novo destino e o destino original na caixa de diálogo de criação, para que o objeto fosse adicionado apenas ao meu alvo original. A solução foi excluir os arquivos de origem (remover apenas a referência) e adicioná-los novamente usando 'Adicionar arquivos', desta vez verificando os dois destinos.
fonte