A class não é compatível com codificação de valores-chave

Eu sei o significado desse erro, mas estou realmente lutando com isso e preciso da ajuda de alguém:

2010-09-21 15:03:11.562 Stocks[5605:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key actionText.' 

Aqui está o meu código:

AlertCell.h

 #import  #import  @interface AlertCell : UITableViewCell { IBOutlet UILabel *actionText; } @property (retain, nonatomic) UILabel *actionText; @end 

E

AlertCell.m

 @implementation AlertCell @synthesize actionText; - (void)dealloc { [actionText release]; [super dealloc]; } @end 

O problema acontece apenas aí:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; AlertCell *cell = (AlertCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AlertCell" owner:nil options:nil]; for (id oneObject in nib) { if ([oneObject isKindOfClass:[UITableViewCell class]]) { cell = (AlertCell *)oneObject; break; } } } cell.actionText.text = [arrayAlert objectAtIndex:indexPath.row]; return cell; } 

Nesta linha:

 NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AlertCell" owner:nil options:nil]; 

Como solicitado, aqui está o meu header para o TableViewCOntroller:

 #import  @interface AlertesViewController : UITableViewController { NSMutableArray *arrayAlert; } 

E você pode ver meu arquivo XIB (como XML): http://pastebin.com/FDVzLYZu

@fim

Alguém pode me ajudar ? Muito obrigado !

Existem algumas opções para resolver isso – vou deixar você decidir qual é a mais apropriada.

A razão pela qual está falhando é porque o proprietário está sendo passado como nulo. Você está ligando a saída actionText ao proprietário do arquivo no IB, mas ao carregar o bico, o proprietário é nulo. Eu acho que ao carregar com um proprietário nulo nos bastidores é usado um NSObject, e é por isso que você está recebendo o erro de chave / valor.

Meu conselho anterior para passar a célula como o proprietário também falharia porque eu não sabia como o Nib é construído; a célula é nula como você ainda tem que criá-la (e o desenfileiramento está passando de volta, portanto, até mesmo passe a célula, pois o proprietário ainda está essencialmente passando por nada).

Duas opções:

  • Instancie uma nova célula na sua implementação -cellForRowAtIndexPath: (NSIndexPath *) indexPath e passe essa nova célula como proprietária (mas eu acho que esta não é a melhor solução para você)
  • Ou, e eu sugiro que esta é a melhor solução, altere a binding de actionText no seu arquivo de ponta para a célula de alerta e não o proprietário do arquivo (você tem o proprietário do arquivo e uma célula de alerta – vincule o UILabel à saída actionText do Alert Cell, e não o dono do arquivo, que é o que está sendo feito no momento) – Eu suspeito que isso é o que você quer. Com isso em mente, o proprietário do arquivo pode se tornar um NSObject novamente.

——- resposta original mantida abaixo como class de proprietário do arquivo também é uma causa comum para esse erro ——-

Isso sugere que você ‘instanciou’ um AlertCell no InterfaceBuilder, e você está vinculando algo ao actiontext, mas a class não está definida como AlertCell, ainda é o NSObject?

Dê uma olhada na checkbox de texto de class na guia identificar da paleta de ferramentas para esse object no Interface Builder. A class deve ser AlertCell, mas eu acho que ainda está definido como NSObject.

Como um aparte, e sinta-se livre para ignorar este conselho, mas há algumas coisas extras que eu o encorajo a fazer, puramente do ponto de vista de expectativas / convenções do Objective C :

  • Nomeie seus arquivos após sua class (maiúscula o primeiro caractere do nome do arquivo).
  • Prefixe seus nomes de class; dois caracteres maiúsculos, normalmente suas iniciais (eu o nomearia DWAlertCell, por exemplo).

você provavelmente baseou seu código em um tutorial da web como o em http://www.e-string.com/content/custom-uitableviewcells-interface-builder ou http://www.icodeblog.com/2009/05/ 24 / custom-uitableviewcell-using-interface-builder /

Seu problema (e tenho 99% de certeza de que é aqui que você tropeçou, cometi o mesmo erro) é que no construtor de interfaces você vinculou seus IBOutlets ao proprietário do arquivo quando deveria vinculá-los a partir da visualização da célula. É por isso que você está recebendo os erros.

Eu tive o mesmo problema e não consegui encontrar a variável / elemento mencionado em nenhum arquivo. Eu segui os seguintes passos.

Ambiente: Xcode 6

  • Vá para o arquivo Xib e clique com o botão direito do mouse (Ctrl + Mouse Click) em cada elemento da interface do usuário para ver suas associações.
  • Em sua seção de pontos de referência, você poderá localizar a associação errada.
  • Remova essa associação
  • Limpar a solução e criar pasta
  • Redefinir simulador
  • Recrie e execute o projeto.

check UIControl Referencing OutLet Nome da propriedade do arquivo nib / StoryBoard

Certifique-se de selecionar célula para colocar class personalizada não o proprietário do arquivo para adicionar class personalizada no topo do lado direito e se você tiver feito isso, antes de fazer alterações remover conexão de saída e, em seguida, remover class personalizada do proprietário do arquivo e adicionar class para exibição de célula

Talvez ajude: Identificador Inspetor quando você selecionou o proprietário do arquivo – UITableViewCell, quando você selecionou a célula dentro de Objetos Sua célula personalizada nane

Depois de 2 horas sobre isso, percebi que eu esqueci de

 @synthesize tableView = _tableView; 

Espero que ajude.

Mário

 #import  @interface ReceptionDetailCell : UITableViewCell @property (weak, nonatomic) IBOutlet UILabel *productName; @property (weak, nonatomic) IBOutlet UILabel *billType; @property (weak, nonatomic) IBOutlet UILabel *bookTime; @property (weak, nonatomic) IBOutlet UILabel *doctorName; @property (weak, nonatomic) IBOutlet UILabel *downBillManName; @end 

Checkout o código de celular e configuração de storyboard, se eles são todos existem, talvez você tenha mudado seus nomes.

    Intereting Posts