La class non è un valore chiave conforms alla codifica

Conosco il significato di questo errore, ma mi sto davvero sforzando e ho bisogno dell’aiuto di qualcuno:

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.' 

C’è il mio codice qui:

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 

Il problema si verifica proprio 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; } 

Su questa linea:

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

Come richiesto, ecco la mia intestazione per TableViewCOntroller:

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

E puoi vedere il mio file XIB (come XML): http://pastebin.com/FDVzLYZu

@fine

Qualcuno può aiutarmi ? Molte grazie !

Ci sono un paio di opzioni per risolvere questo problema – ti permetterò di decidere qual è il più appropriato.

Il motivo per cui non funziona è perché il proprietario viene passato come zero. Stai vincendo l’outlet di actionText al proprietario del file in IB, ma poi quando carichi il pennino, il proprietario è zero. Suppongo che durante il caricamento con un proprietario nullo dietro le quinte venga utilizzato un NSObject, motivo per cui si ottiene l’errore chiave / valore.

Il mio precedente consiglio di passare la cella in quanto il proprietario fallirebbe anche perché non sapevo come fosse costruito il pennino; la cella è nul come non l’hai ancora creata (e la dequeue passa di nuovo nul, quindi passa anche la cella in quanto il proprietario sta ancora passando praticamente nulla).

Due opzioni:

  • Crea un’istanza di una nuova cella in -cellForRowAtIndexPath: (NSIndexPath *) implementazione indexPath e passa quella nuova cella come proprietario (ma suppongo che questa non sia la soluzione migliore per te)
  • Oppure, e suggerirei che questa è la soluzione migliore, cambia il binding di actionText nel file del pennino nella cella di avviso e non nel proprietario del file (hai il proprietario del file e una cella di avviso – collega l’UILabel all’azione Alert Cell, e non il proprietario del file, che è ciò che viene fatto al momento) – Sospetto che questo sia ciò che desideri. Con questo in mente il proprietario del file può diventare di nuovo un NSObject.

——- La risposta originale è mantenuta di seguito poiché la class del proprietario del file è anche una causa comune di questo errore ——-

Suggerisce di aver “istanziato” un AlertCell in InterfaceBuilder, e si sta legando qualcosa a actiontext, ma la class non è impostata su AlertCell, è ancora NSObject?

Dai un’occhiata alla casella di testo della class nella scheda Identity framework della tavolozza degli strumenti per quell’object in Interface Builder. La class dovrebbe essere AlertCell, ma suppongo che sia ancora impostata su NSObject.

Per inciso, e sentiti libero di ignorare questo consiglio, ma ci sono un paio di cose extra che ti incoraggerei a fare, puramente dal punto di vista delle aspettative / convenzioni dell’objective C :

  • Dai un nome ai tuoi file dopo la tua class (maiuscolo il primo carattere del nome del file).
  • Prefix i nomi delle classi; due caratteri maiuscoli, in genere le tue iniziali (lo chiamerei DWAlertCell, ad esempio).

probabilmente hai basato il tuo codice su un’esercitazione web come quella su http://www.e-string.com/content/custom-uitableviewcells-interface-builder o http://www.icodeblog.com/2009/05/ 24 / custom-UITableViewCell-con-interface-builder /

Il tuo problema (e sono sicuro al 99% che questo è il punto in cui sei inciampato, ho fatto lo stesso errore) è che nel generatore di interfacce hai collegato i tuoi IBOutlet dal proprietario del file quando dovresti collegarli dalla vista cella. Questo è il motivo per cui ottieni gli errori.

Ho avuto lo stesso problema e non ho trovato la variabile / elemento menzionato in nessun file. Ho seguito i seguenti passaggi.

Ambiente: Xcode 6

  • Vai al file Xib e fai clic con il pulsante destro del mouse (Ctrl + clic del mouse) su ciascun elemento dell’interfaccia utente per vedere le sue associazioni.
  • Nella sezione relativa ai punti di riferimento, sarà ansible individuare l’associazione errata.
  • Rimuovi quell’associazione
  • Pulisci la soluzione e crea una cartella
  • Reimposta simulatore
  • Ricostruisci ed esegui il progetto.

controlla UIControl Referencing OutLet Nome proprietà da pennino / StoryBoard File

Assicurati di selezionare la cella per mettere la class personalizzata non il proprietario del file per aggiungere una class personalizzata sul lato destro in alto e, se hai fatto ciò, prima di apportare qualsiasi modifica rimuovi la connessione di uscita e quindi rimuovi la class personalizzata dal proprietario del file e aggiungi la vista dalla class alla cella

Forse aiuta: Indentity Inspector quando hai selezionato il proprietario del file – UITableViewCell, quando hai selezionato la cella all’interno degli oggetti La tua cella personalizzata nane

Dopo 2 ore su questo, ho capito che mi sono dimenticato di

 @synthesize tableView = _tableView; 

Spero che sia d’aiuto.

Mario

 #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 

Scopri le impostazioni del codice cella e dello storyboard, se sono tutte esistenti, forse hai cambiato il loro nome.