2012-08-16 12 views
19

En primer lugar, esta discusión no resolvió mi problema.Personalizado UITableViewCell me da: esta clase no es el valor clave que cumple con la codificación

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

Configuración:

Tengo una matriz de objetos Persona en MainViewController. Quiere mostrar los objetos en un UITableView en AllContactsViewController.

Problema:

Todas las obras como se esperaba al utilizar el valor predeterminado UITableViewCell. Cuando uso mi TableCell personalizado obtengo un error apuntando a que esta clase no tiene valor clave que cumpla con la codificación.

Este error ocurre justo después de conectar CUALQUIERA de mis tres outlets en IB con mi clase TableCell.

Nota:

TableCell tiene tres propiedades: una etiqueta name & email + imageView.

Espero que pueda ayudar.

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:

Quizás una captura de pantalla ayude a IB.

enter image description here

Añadido AllContactsViewController completa.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

¿No se cumple el valor de clave para qué tecla? Proporcione el mensaje de error exacto. - ¿Verificaste que 'cell = [array objectAtIndex: 0]' en realidad devuelve una instancia de tu clase 'TableCell'? –

+0

Depende de la 'salida' que conecto en IB. Conecto el 'nombre'' etiqueta', la aplicación falla, conecto el 'imageView' en lugar de la aplicación se bloquea. Parece que tengo un problema con TODAS las propiedades que he declarado en 'TableCell' Estoy seguro de que obtengo una instancia de' TableCell'; de lo contrario, el mensaje de error debe ser diferente ya que el error apunta a las salidas que tengo en 'TableCell' - Exact mensaje de error: '[ setValue: forUndefinedKey:]: esta clase no es un valor clave que cumpla con la codificación de la imagen imageView.'' –

+0

El mensaje de error apunta a' AllContactsViewController'! Agregue 'NSLog (@" class =% @ ", [cell class]);' a su código para verificar. –

Respuesta

53

Si va a conectar las salidas desde el propietario del archivo, que debe hacer diferente:

1 - Definir la clase de la UITableViewCell a su clase TableCell:

enter image description here

2 - Conecte las salidas no desde el propietario del archivo, sino desde TableCell en la lista de objetos:

Connect the outlets

+0

En IB (Identity Insp.) I han establecido la 'clase' en' TableCell'. Entonces, cuando hago clic en el propietario del archivo, veo las 'salidas' que he declarado en' TableCell' –

+0

Compruebe la edición, resolverá su problema –

+0

Hola Natan, desafortunadamente no, fui a IB a configurar el 'TableViewCELL' a mi medida 'clase'.CTRL hizo clic en la 'celda' y conectó las' salidas' pero el mismo error. He editado mi publicación original y he añadido una captura de pantalla. Tal vez ayuda. –

1

Si está utilizando Xcode 6 GM, hay un error en IB que puede dar como resultado este error. No creo que el OP haya tenido este problema porque es más obvio (puedes ver una "clase no definida MyXXXCell" en el registro) pero como llegas a esta pregunta de google como yo, solo intenta ingresar el nombre de la clase en IB y presiona enter nuevamente y una vez que esté realmente guardado en el archivo storyboard/xml estará bien.

0

Tuve el mismo problema y cualquiera de los comentarios aquí o en otras discusiones me ayudó ... al final solo hice una causa limpia, estaba bastante seguro de estar haciendo todo correctamente y sí ... mágicamente funcionó!

0

Esto me pasó justo después de que Git se fusionara y resolviera algunos conflictos. Había arruinado mi proyecto XCode.

He intentado todo el StackOverflow. Al principio, pensé que mi archivo .m de clase personalizada no se había agregado a la lista de clases de compilar fuentes. Pero es un caso, sin embargo, incluso después de agregarlo, me devolvió el mismo problema.

Cómo resolvió:

  1. que mantienen una copia de seguridad de mi archivo .xib y su .m clase personalizada de respaldo y archivos .h.
  2. Luego, limpie el proyecto e intente ejecutar la aplicación a través de XCode (que podría no funcionar)
  3. A continuación, vuelva a agregar los archivos al proyecto XCode y funcionará.

¡Salud!

Cuestiones relacionadas