2012-08-16 9 views
19

Prima di tutto, questa discussione non ha risolto il mio problema.Custom UITableViewCell mi dà: questa classe non è un valore di codifica conforme

Custom UITableViewCell subclass: This class is not a key value coding-compliant

Setup:

Ho un array di oggetti persona in MainViewController. Vuoi mostrare gli oggetti in un UITableView in AllContactsViewController.

Problema:

Tutte le opere come previsto quando utilizzare il valore predefinito UITableViewCell. Quando uso la mia personalizzata TableCell viene visualizzato un errore che indica che questa classe non è conforme ai codici di codifica.

Questo errore si verifica subito dopo la connessione di QUALSIASI dei miei tre outlets in IB con la mia classe TableCell.

Nota:

TableCell ha tre proprietà: un name & email etichetta + imageView.

Spero che tu possa aiutare.

TableCell.h

#import <UIKit/UIKit.h> 

@interface TableCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *nameLabel; 
@property (weak, nonatomic) IBOutlet UILabel *emailLabel; 
@property (weak, nonatomic) IBOutlet UIImageView *imageView; 

@end 

TableCell.m

#import "TableCell.h" 

@implementation TableCell 
@synthesize nameLabel, imageView, emailLabel; 

AllContactsViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdent = @"TableCell"; 

    TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdent]; 

    if (cell == nil) { 

     NSArray *array = [[NSBundle mainBundle]loadNibNamed:@"TableCell" owner:self options:nil]; 
     cell = [array objectAtIndex:0]; 
    } 

    NSString *firstAndLastnameString = 
    [NSString stringWithFormat:@"%@ %@", 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] firstName], 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] lastName]]; 

    cell.nameLabel.text = firstAndLastnameString; 

    cell.emailLabel.text = 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] eMail]; 

    cell.imageView.image = 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] contactPicture]; 

    return cell; 
} 

U PDATE:

Forse uno screenshot aiuterà da IB.

enter image description here

Aggiunto pieno AllContactsViewController.h

#import <UIKit/UIKit.h> 
#import "VCDelegate.h" 
#import "TableCell.h" 

@interface AllContactsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

@property (weak, nonatomic) id <VCDelegate>delegate; 

@property (weak, nonatomic) IBOutlet UITableView *allContactsTableView; 

@property (strong, nonatomic) NSMutableArray *allContactsArray; 

@property (assign) int currentArrayIndexNumber; 

- (IBAction)closeBtnTapped:(id)sender; 

@end 
+1

Non conforme ai valori-chiave per quale chiave? Dare il messaggio di errore esatto. - Hai verificato che 'cell = [array objectAtIndex: 0]' restituisce effettivamente un'istanza della classe 'TableCell'? –

+0

Dipende dallo 'sbocco' che connetto in IB. Collego il 'name'' label', l'app si blocca, collego 'imageView' invece l'app si blocca. Sembra che abbia un problema con TUTTE le proprietà che ho dichiarato in 'TableCell' Sono sicuro di ottenere un'istanza indietro di' TableCell' altrimenti il ​​messaggio di errore deve essere diverso poiché l'errore punta alle prese che ho in 'TableCell' - Esatto messaggio di errore: '[ setValue: forUndefinedKey:]: questa classe non ha valore di codifica conforme alla chiave imageView.'' –

+0

Il messaggio di errore indica' AllContactsViewController'! Aggiungi 'NSLog (@" class =% @ ", [classe di celle]);' al tuo codice da controllare. –

risposta

53

Se ci si connette i punti vendita dal proprietario del file, si dovrebbe fare di diverso:

1 - Definire la classe della UITableViewCell alla classe TableCell:

enter image description here

2 - Collegare le prese non dal proprietario del file, ma da TableCell nell'elenco degli oggetti:

Connect the outlets

+0

In IB (Identity Insp.) I abbiamo impostato 'class' già su' TableCell'. Così, quando faccio clic sul proprietario del file, vedo i 'outlet 'che ho dichiarato in' TableCell' –

+0

Controlla la modifica, risolverà il tuo problema –

+0

Ciao Natan, sfortunatamente no, sono andato a IB per impostare il TableViewCELL alla mia abitudine 'class'.CTRL ha cliccato su 'cell' e ha collegato' 'outlets' ma lo stesso errore. Ho modificato il mio post originale e aggiunto uno screenshot. Forse aiuta. –

1

Se si utilizza Xcode 6 GM, c'è un bug in IB che potrebbe causare questo errore. Non penso che l'OP avesse questo problema perché è più ovvio (puoi vedere una "classe indefinita MyXXXCell" nel log) ma in questo modo arrivi a questa domanda da google come me, prova a inserire il nome della classe in IB e premi invio di nuovo e una volta salvato nel file storyboard/xml andrà tutto bene.

0

Ho avuto lo stesso problema e qualsiasi commento qui o in altre discussioni mi ha aiutato ... alla fine ho appena fatto una causa pulita ero abbastanza sicuro che stavo facendo tutto correttamente e sì ... magicamente funzionato!

0

Questo mi è successo subito dopo la fusione di Git e la risoluzione di alcuni conflitti. Aveva rovinato il mio progetto XCode.

Ho provato su StackOverflow. All'inizio pensavo che il mio file .m della classe Custom non fosse stato aggiunto all'elenco delle classi Compile Sources. Ma è un caso, tuttavia, anche dopo averlo aggiunto, mi ha restituito lo stesso problema.

Come ho risolto:

  1. ho mantenuto un backup del mio file .xib e la sua classe .m supporto personalizzato e file .h.
  2. Quindi pulire il progetto e provare a eseguire l'applicazione tramite XCode (che potrebbe non funzionare)
  3. Quindi aggiungere nuovamente i file al progetto XCode e funzionerà.

Cheers!

Problemi correlati