67 votes

La classe n'est pas compatible avec le codage des valeurs de clé

Je sais que le sens de cette erreur, mais j'ai vraiment du mal avec elle, et j'ai besoin de l'aide de quelqu'un :

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

Il y a mon code ici :

AlertCell.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>


@interface AlertCell : UITableViewCell {
    IBOutlet UILabel *actionText;
}

@property (retain, nonatomic) UILabel *actionText;

@end

Et

AlertCell.m

@implementation AlertCell
@synthesize actionText;

- (void)dealloc {
    [actionText release];
    [super dealloc];
}

@end

Le problème qui se passe juste là :

- (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;
}

Sur cette ligne :

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

Comme demandé, voici mon header pour le TableViewCOntroller :

#import <UIKit/UIKit.h>


@interface AlertesViewController : UITableViewController {
    NSMutableArray *arrayAlert;
}

Et vous pouvez voir mon XIB fichier (au format XML): http://pastebin.com/FDVzLYZu

@end

Quelqu'un peut-il m'aider ? Merci beaucoup !

102voto

theprof Points 741

vous avez probablement en fonction de votre code sur un site web tutoriel comme celui de http://www.e-string.com/content/custom-uitableviewcells-interface-builder ou http://www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/

Votre problème (et je suis sûr à 99% que c'est là que vous vous êtes trompé, je viens de faire la même erreur), c'est que dans interface builder vous avez lié votre IBOutlets de Propriétaire du Fichier lorsque vous devez les relier à partir de la vue sur les cellules. C'est pourquoi vous obtenez les erreurs.

84voto

dannywartnaby Points 3336

Il ya un couple d'options pour résoudre ce - je vous laisse décider ce qui est le plus approprié.

La raison pour laquelle il ne est parce que le propriétaire est passé comme nul. Vous êtes à la liaison de la actionText prise pour le propriétaire du fichier de l'IB, mais ensuite lors du chargement de la plume, le propriétaire est nul. Je suppose que lors du chargement avec un nul propriétaire derrière les coulisses d'un NSObject est utilisé, qui est pourquoi vous obtenez la clé/valeur d'erreur.

Mon avis précédent pour passer à la cellule comme le propriétaire a également échouer comme je ne savais pas comment la Plume est construit; la cellule est nul, vous n'avez pas encore créer (et de résorption de l'est en passant néant dos, de sorte que même passer de cellule en tant que le propriétaire est toujours essentiellement en passant nul).

Deux options:

  • Instancier une nouvelle cellule dans votre -cellForRowAtIndexPath:(NSIndexPath *)indexPath mise en œuvre, et de transmettre cette nouvelle cellule en tant que propriétaire (mais je suppose que ce n'est pas la meilleure solution pour vous)
  • Ou, et je crois que c'est la meilleure solution, changer la liaison de actionText dans votre fichier nib à l'Alerte de la Cellule et non pas le propriétaire du fichier (Vous êtes Propriétaire du Fichier et une Alerte de la Cellule - lier la UILabel à la actionText sortie de l'Alerte de la Cellule, et non pas le propriétaire du Fichier, qui est ce qui est fait à l'heure actuelle) - je suppose que c'est ce que vous voulez. Avec cela à l'esprit, propriétaire du fichier peut devenir un NSObject de nouveau.

------- Réponse originale à cette question maintenu en dessous que le propriétaire du fichier de classe est aussi une cause fréquente de cette erreur -------

Il suggère que vous avez des "instancié" une AlertCell dans InterfaceBuilder, et vous êtes de liaison quelque chose à actiontext, mais la classe n'est pas définie à AlertCell, c'est encore NSObject?

Jetez un oeil à la classe de la zone de texte sur l'onglet identification de la palette des outils pour l'objet dans Interface Builder. La classe doit être AlertCell, mais je suppose que c'est toujours à la NSObject.

En aparté, et n'hésitez pas à ignorer ce conseil, mais il ya un couple de choses supplémentaires que je vous encourage d'ailleurs à le faire, simplement à partir d'un Objectif C les attentes et les conventions de point de vue:

  • Nom de vos fichiers après votre classe (en majuscule le premier caractère du nom de fichier).
  • Préfixe vos noms de classe; deux caractères en majuscules, en général, vos initiales (j'avais un nom, il DWAlertCell, par exemple).

7voto

Muhammad Umar Points 11

J'ai eu le même problème, et je ne pouvais pas mentionné variable/élément dans un fichier quelconque. J'ai suivi les étapes suivantes.

Environnement: Xcode 6

  • Accédez au fichier Xib, et faites un clic droit (Ctrl+Clic) sur chaque UI élément de voir ses associations.
  • Dans son référencement des points de vente de l'article, vous serez en mesure de localiser le des erreurs d'association.
  • Supprimer cette association
  • Nettoyer la solution et le dossier de création
  • Réinitialiser Simulateur
  • Reconstruction et exécuter le projet.

5voto

Baljeet Singh Points 66

vérifier le nom de la propriété UIControl qui fait référence à OutLet à partir du fichier nib / StoryBoard

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X