Carga UITableViewCell desde un xib (esta class no cumple con la encoding de valor key para la key)

Tengo curiosidad sobre la forma correcta de usar un file xib para distribuir el contenido de una UITableViewCell. Cuando trato de seguir todos los pasos que encuentro en Internet, siempre obtengo

Terminar la aplicación debido a la exception no detectada 'NSUnknownKeyException', razón: '[<NSObject 0x10fe7d790> setValue: forUndefinedKey:]: esta class no cumple con la encoding de valor key para la key statusLabel.'

Entonces, aquí está el código relacionado

@interface MyCell : UITableViewCell @property (nonatomic,strong) IBOutlet UILabel* messageLabel; @property (nonatomic,strong) IBOutlet UILabel* statusLabel; 

Y en mi UIViewController he probado ambos

 -(void)viewDidLoad { [self.tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"CustomCellReuseID"]; } 

o usando

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomCellReuseID"; MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if ( !cell ) { cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil] lastObject]; // or sometimes owner is nil eg //cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil] lastObject]; } // ... remainder of cell setup return cell; } 

Ambos enfoques fallan con la exception que mencioné en el título. Parece que con el propietario: self el error se debe a que UIViewController no tiene las properties IBOutlet. Con el propietario: no es porque utiliza internamente un object NSO que, por supuesto, tampoco tiene las properties IBOutlet.

El único trabajo que he encontrado es el siguiente. Dentro del método init para mi celda agrego la vista / celda devuelta a mi celda de initialization

p.ej

 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { // nil out properties [self.contentView addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil] lastObject]]; } return self; } 

Esto parece realmente hokey (aunque también puedo simplemente cambiar el tipo de base en el xib a UIView en lugar de MyCell o UITableViewCell) lo que lo hace sentir un poco less hokey.

He visto muchas publicaciones donde las personas se topan con este error en particular. Esto generalmente se explica como un problema de cableado en el xib en sí, sin embargo, si elimino todas las conexiones en el xib, se carga bien, pero en el momento en que agrego una connection entre un elemento ui y el propietario del file, el error regresa, por lo que no creo que tenga nada que ver con 'limpiar' el xib (incluso mirando el XML para el xib no hay conexiones errantes en la list).

¿Alguien más tiene alguna idea de cómo se produce este error?

¿Ha conectado las salidas de "messageLabel y statusLabel" en el file Cell Nib? El error indica que la propiedad IBOutlet para "statusLabel" no se encuentra en el file Nib (problema de connection).

Compruebe también si el file MyCell.xib no (¡equivocadamente!) Se agrega dentro

 Target Settings -> Build Phases -> Compile Sources 

Las fonts de compilation son para todos los files .m y no para los files de resources .xib.

Y

Copy Bundle Los resources son para files de resources .Xib.