2012-03-15 8 views
8

Ho esaminato quasi tutte le domande correlate su questo argomento in StackOverflow e ho provato tutte le possibili soluzioni, ma non riesco ancora a capire perché ottengo questo errore:Sottoclasse UITableViewCell personalizzata: questa classe non è un valore chiave conforme alla codifica

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<CustomCell 0x6e627d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key title.' 

sto cercando di caricare una cella di vista tabella personalizzata con il nibname: @ "CustomCell". La sua classe è assegnata a "CustomCell" (stesso nome di classe del nome del pennino). Il proprietario del file è anche impostato sulla classe che carica queste celle - "ProductsTableViewControllerWithSearch". Tutti i punti vendita del pennino sono collegati a quelli in CustomCell.m

Ecco il mio codice:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellClassName = @"CustomCell"; 
    static NSString *CellIdentifier = @"Custom Items Cell"; 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 

     NSArray *topLevelItems = [[UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]] instantiateWithOwner:self options:nil]; 
     cell = [topLevelItems objectAtIndex:0]; 

    } 
//... more irrelevant code here 
} 

Qualcuno può aiutarmi per favore. Ci sto lavorando da più di 4 ore. Molte grazie!

PS: sto usando ARC e sto sviluppando per iOS 5.

Ecco la mia CustomCell.h.

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell{ 
    UILabel *textLabel; 
    UILabel *detailTextLabel; 
    UIButton *starButton; 
} 

@property (strong, nonatomic) IBOutlet UILabel *textLabel; 
@property (strong, nonatomic) IBOutlet UILabel *detailTextLabel; 
@property (strong, nonatomic) IBOutlet UIButton *starButton; 

@end 

Non c'è nulla nella mia CustomCell.m

+0

cosa è CustomCell una sottoclasse di? – JoePasq

+0

@JoePasq UITableViewCell. – acecapades

risposta

10

In Interface Builder è necessario impostare la classe della cella per CustomCell e CustomCell ha bisogno di avere una proprietà title.

this class is not key value coding-compliant for the key …

In genere indica che una proprietà non viene trovata su una classe e Interface Builder sta tentando di utilizzare tale proprietà, provocando un arresto anomalo.

+0

Sì, ho già impostato la classe di CustomCell.xib su CustomCell ...Ecco perché sono riuscito a connettere tutti gli UILabels in CustomCell.m. – acecapades

+0

perché è necessario avere un "titolo" di proprietà? – acecapades

+1

... Non lo so. Hmm. Per le visualizzazioni "cresciute" di solito tutti hanno un titolo, non so quando/dove le celle di visualizzazione tabella usano il loro titolo. – JoePasq

5

Presumo che si verifichi questo errore quando la cella viene caricata da NIB in fase di runtime. (Se invece è rottura su qualche riga di codice hai scritta, per l'amor di Dio, cancellare quella linea di codice!)

Andate in vista XIB del tuo cellulare personalizzato, ctrl-click su "proprietario di File" e scollegare qualunque la connessione che hai chiamato "titolo". Se ti senti spunky, scollega tutto, quindi ricollega le cose che vuoi. Vedi se lo risolve. Altrimenti, sarò qui per alcune ore.

+1

Buona strategia: vedere se una proprietà 'titolo' * è * cablata. – JoePasq

+0

Questa è quasi sempre la causa in questo scenario! – lnafziger

+0

Sì, la cella viene caricata dal runtime NIB. Funziona ora quando ho dichiarato una proprietà chiamata 'titolo' nel file di intestazione. Non sapevo che una proprietà chiamata titolo doveva essere dichiarata. Grazie a @JoePasq. Non l'ho visto in tutte le altre domande relative a questo qui in StackOverflow. – acecapades

13

Questo errore si verifica se si sta collegando qualsiasi cosa che non appartiene a quella vista.

In questo caso, la soluzione è in Interface Builder

  1. Prima Modificare il proprietario del file identità di classe a NSObject.
  2. Scollega ogni IBOutlet nel proprietario del file.
  3. Modificare la classe di identità dei propri NIB personalizzati con il nome della classe CustomTableViewCell.
  4. Collega qui tutto il tuo IBOutlet.

Questo è tutto.

+0

Se stai caricando il pennino direttamente nel tuo codice ViewController e vuoi essere in grado di scrivere il seguente codice. 'Cellula MyCustomCell *; cell.customTextField.text.delegate = self; 'Questo funzionerà per te. Inoltre penso che abbia più senso delle altre risposte attuali. –

+7

Gli UILabels di CustomTablecell devono essere connessi all'oggetto UITableViewCell e non al proprietario del file. Lo dimentico ogni volta. Non sono sicuro del perché. – user798719

+0

Questa dovrebbe essere la risposta accettata qui - almeno ha risolto il problema che avevo. – Gereon

0

Per il mio caso di XCode6.0.1, pulisce il progetto e tutto fila liscio

Problemi correlati