setValue: forUndefinedKey: esta class não é compatível com codificação de valor-chave para a chave

Estou criando um login para ver os tickets de suporte. A primeira visualização é a visualização do ticket e, se você não estiver logado, você será direcionado para a canvas de login. No entanto eu recebo isso:

Suporte [3209: 18e03] * Aplicativo de finalização devido à exceção não capturada ‘NSUnknownKeyException’, razão: ‘[setValue: forUndefinedKey:]: esta class não é compatível com codificação de chave de valor para a chave LoginScreen.’ *

Primeiro pilha de chamadas lance: (0x1f17012 0x1634e7e 0x1f9ffb1 0x10e1711 0x1062ec8 0x10629b7 0x108d428 0x7990cc 0x1648663 0x1f1245a 0x797bcf 0x65ce37 0x65d418 0x65d648 0x65d882 0x669235 0x8683d2 0x6664f3 0x666777 0x6667b7 0x9d1fe2 0x9c3ad9 0x65e422 0x2b15 0x65f753 0x65fb2f 0x661286 0x65fe3f 0x592910 0x592895 0x5926e5 0x1edfafe 0x1edfa3d 0x1ebd7c2 0x1ebcf44 0x1ebce1b 0x22aa7e3 0x22aa668 0x57c65c 0x1f0d 0x1e35) libc + + abi.dylib: terminate chamado lançando uma exceção

Aqui está o meu código para LoginScreen.m

#import "UIAlertView+error.h" #import "LoginScreen.h" #import "API.h" #include  #define sayWhat @"REMOVEDFORSECURITY" @implementation LoginScreen -(void)viewDidLoad { NSLog(@"Found me!"); [super viewDidLoad]; //focus on the username field /show keyboard [fldUsername becomeFirstResponder]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } -(IBA ction)btnLoginRegisterTapped:(UIButton*)sender { if (fldUsername.text.length < 4 || fldPassword.text.length  0) { //success } else { //error' [UIAlertView error:[json objectForKey:@"error"]]; } }]; } @end 

e LoginScreen.h

 #import  @interface LoginScreen : UIViewController { //the login form fields IBOutlet UITextField* fldUsername; IBOutlet UITextField* fldPassword; } //action for when either button is pressed -(IBAction)btnLoginRegisterTapped:(id)sender; @end                                                                                                                           

Essas exceções inexplicáveis ​​geralmente são resultado de um arquivo xib impuro. Abra o xib no xcode, selecione File’s Owner e clique no “Connection Inspector” (seta superior direita), para ver todas as tomadas de uma só vez. Procure ! s indica uma tomada ausente.

Verifique suas conexões no Interface Builder. Você provavelmente está se referindo a um IBOutlet ou IBOutlet inexistente.

Veja

Obrigado rapazes. Eu resolvi esse problema com sua ajuda. Então, espero que esta captura de canvas seja útil para quem tem o mesmo problema.

Eu tive problema semelhante com a criação de TableCell personalizado. O problema foi que eu configurei o FileOwner para minha class personalizada e, em seguida, conectei as tomadas.

O FileOwner deve permanecer como NSObject.

Vá para a guia de pontos de interrupção do Xcode. Use o botão na parte inferior para adicionar um ponto de interrupção de exceção. Agora você verá o código que está chamando setValue: forKey: e a pilha associada. Com sorte, isso te indicará diretamente a fonte do problema.

É estranho que sua class seja LoginScreen, mas o erro é dizer que alguém está usando o “LoginScreen” como uma chave. Verifique se LoginScreen.m faz parte do seu alvo.

insira a descrição da imagem aqui


Nota de rodapé: com o Swift, um problema comum surge se você alterar o nome de uma class (assim, você o renomeia em todo o seu código). Storyboard luta contra isso, e você geralmente tem que re-arrastar quaisquer conexões envolvendo essa class. E, em particular, insira novamente o nome da class em qualquer lugar usado na guia IdentityInspector à direita. (No exemplo da foto, escrevi incorretamente o nome da class. Mas a mesma coisa acontece quando você renomeia uma class; embora esteja aparentemente correto no IdentityInspector , é necessário digitar o nome novamente; ele será preenchido automaticamente e você será bom para ir.)

Eu tive isso e olhei para tudo e não vi nenhum problema, mas eventualmente lembrei de tentar Limpar e limpar Dados Derivados e isso resolveu!

Eu tive um problema semelhante, mas eu estava usando initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil explicitamente usando o nome da class como a seqüência passada (sim forma ruim!).

Acabei apagando e recriando o view controller usando um nome um pouco diferente, mas deixei de alterar a string especificada no método, assim minha versão antiga ainda era usada – mesmo que estivesse na lixeira!

Provavelmente vou usar essa estrutura daqui para frente, como sugerido em: Está passando dois parâmetros nulos para initWithNibName: bundle: método bad practice (ou seja, inseguro ou mais lento)?

 - (id)init { [super initWithNibName:@"MyNib" bundle:nil]; ... typical initialization ... return self; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return [self init]; } 

Espero que isso ajude alguém!

Este erro é outra coisa!

Aqui está como eu consertei. Estou usando o xcode versão 6.1.1 e usando o swift. Eu recebi esse erro toda vez que meu aplicativo tentou executar um segue para pular para a próxima canvas. Aqui o que eu fiz.

  1. Verificou que o botão estava conectado à ação correta (esse não era o problema, mas ainda é bom verificar)
  2. Verifique se o botão não possui ações ou tomadas adicionais que você possa ter criado por engano. (Este não foi o problema, mas ainda é bom verificar)
  3. Verifique os logs e certifique-se de que todos os botões na PRÓXIMA TELA tenham as ações corretas e, se houver algum seguimento, certifique-se de que eles tenham um identificador exclusivo. (Esse foi o problema)
    • Um dos segues não tinha um identificador exclusivo
    • Um dos botões teve uma ação e duas saídas que eu criei por engano.

Exclua todas as saídas adicionais e certifique-se de que os seguidos para a próxima canvas tenham identificadores exclusivos.

Felicidades,

Eu tive esse problema porque eu não estava usando StoryBorad, e nas propriedades do projeto -> Deploy info -> Main interface era o nome do Main Xib.

Apaguei o valor na interface principal e resolvi o problema.

Ocorreu um erro semelhante ao criar uma class de visualização personalizada, isso porque, de alguma forma, uma das tomadas ficou conectada duas vezes no arquivo XIB (acho que inicialmente controlei arrastando o controle diretamente para o código, mas o último controle foi arrastado novamente do Proprietário do arquivo). Eu abri o arquivo XIB e remova um deles, depois disso tudo funcionou bem. Espero que isso ajude.

Eu tenho esse em um PickerView de todos os lugares. A mensagem de erro estava nomeando o problema com “queuePicker” no primeiro da mensagem. Foi causado por uma Saída de Referência anterior, que não era válida por muito tempo depois que eu adicionei um componente e renomei o item original do NSArray diferente de queuePicker. CNTL + clique no seu object StoryBoard lhe dá as conexões. Eu cliquei no “x” ao lado do ViewController para queuePicker em Outlets de referência, fiz uma nova conexão e viola, sem mais falhas.

Você provavelmente está definindo um valor para uma chave no alertView, o que não é permitido. A chave é neste caso LoginScreen . Não vejo nenhuma chamada para setValue() , então presumo que esteja em outro lugar no código.

Eu encontrei esse mesmo problema hoje. Como sugerido nesta resposta , o problema era um xib impuro. No meu caso, o xib impuro era o resultado da atualização de um xib que estava sendo carregado por algo diferente do controlador de visualização ao qual estava associado.

O Xcode me permite criar e preencher uma nova saída e conectá-la ao proprietário do arquivo, embora eu o tenha explicitamente conectado à fonte do controlador de exibição correto. Aqui está o código gerado pelo Xcode:

       

Quando eu corri meu aplicativo, ele caiu com o mesmo erro não not key value coding-compliant . Para corrigir o problema, removi a saída do Proprietário do arquivo no Interface Builder e conectei-o explicitamente ao object do controlador de visualização no contorno esquerdo, em vez de ao código no editor assistente.

Isso aconteceu comigo no seguinte cenário:

Eu criei um segundo projeto no meu espaço de trabalho, escolhi “Single View Application” para o modelo.

Fui então para o Interface Builder (principal storyboard do iPhone), adicionei um UISwitch à visão principal e o conectei ao view controller através de um IBOutlet e um IBAction ( -valueChanged: .

No lançamento, o aplicativo trava com a exceção mencionada na pergunta. Se eu remover o interruptor da vista, funciona.

Após uma inspeção cuidadosa, percebi que controlei as conexões para o ViewController.h de outro projeto no mesmo espaço de trabalho. O conjunto ‘Automatic’ do Editor Assistente do Interface Builder (também conhecido como ícone do baú do Tuxedo ) escolheu como “contrapartida” o arquivo errado (com o nome correto).

Espero que isso ajude alguém, especialmente porque os modelos de projeto ‘Single View Application’ e ‘SpriteKit Game’ (no meu caso) criam uma class de controlador de visualização padrão chamada “ViewController”.

Se você tiver diferentes arquivos do storybord e tiver referências de outlets com criação de outlets em seus arquivos de header, basta remover as conexões clicando com o botão direito do mouse no proprietário dos arquivos.

Proprietário de arquivos-> Clique com o botão direito-> remover conexão indesejada por lá.

Vá até isso para uma explicação clara. O que isto significa? “‘NSUnknownKeyException’, razão:… esta class não é compatível com codificação de valor-chave para a chave X”

Isso geralmente significa que algo está tentando acessar o @property “givenName” .

Se você estava fazendo algo com o Interface Builder(IB) , a causa usual é que você:

  1. excluiu essa propriedade da class, mas ainda não excluiu as conexões no IB
  2. OU: você tem um object Proprietário do Arquivo definido para a class errada (verifique as propriedades – diferente dependendo de qual versão do xcode você está usando
    • para encontrar o nome da class definido como. Você provavelmente copiou / colou um arquivo NIB, e não alterou este campo no NIB), e conectou uma saída para essa class, mas o proprietário real do arquivo é algo diferente

No meu caso eu tenho IBOutlet UILabel * descrição em .h, foi com amarelo /! \ – “não será sintetizado” , como eu me lembro. Não sei o que é e por que só esse label.

Mas eu tenho esse acidente e erro como acima. Excluído * description e recriar * description2. Nenhum acidente no resultado.

Para mim, eu mudei uma chamada para o meu header de exibição de coleção, onde eu estava registrando o bico para registrar a class. Isso consertou.

Pois é porque não tem 2 function

 @implementation CellTableView - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return [self init]; } - (void)awakeFromNib { } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; } @end 

Eu tive que excluir todos os objects e adicioná-los novamente. Isso parecia ter resolvido o problema.