Celda prototipo del guión gráfico que no crea UILabels, etc.

Mi pregunta es muy similar a esta .
Mis células prototipo personalizadas diseñadas en Interface Builder usando storyboards tienen todos los objects internos configurados como nil (no creados), por lo que cuando trato de asignarles valores, permanecen en blanco.

Estoy usando Xcode 4.6.2 y ejecutando el código en el simulador de iPhone 6.1. Esto es lo que he hecho:

  • diseñó un prototipo de célula en el generador de interfaces con los campos necesarios.
  • creó una subclass de UITableViewCell para esta celda personalizada en código, y luego configuró la celda en el generador de interfaces para este tipo.
  • control-arrastró los campos al file .h, que configuró los objects (UILabels, etc.) para mí. Puse el identificador de la celda en "serverNameCell"
  • establezca el origen de datos y el delegado de la tabla en el Viewcontroller en el que se encuentra la tabla.
  • asoció la tabla con un object de tabla en el ViewController

Por el momento, la tabla se muestra con el número correcto de secciones y filas, pero los valores de la celda no se configuran.

Este es el cellForRowAtIndexPath:(NSIndexPath *)indexPath :

 NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"]; 

Siempre recupero una celda, y la location de la memory parece estar bien para un object válido.

Pero cuando trato de cell.name.text = [thisServer name]; Me parece que la label cell.name es siempre nula.
No hay lockings, pero mis campos no se configuran.

He comprobado un millón de veces que el identificador está bien, ¡es así! He revisado la documentation de Apple para las celdas personalizadas de un storyboard, pero aún tengo este problema frustrante.

¿Alguien más tenía esto y lo resolvió?

Hoy tuve este problema exacto con el guión gráfico de Xcode 5. Después de tirar casi todo mi pelo restante, noté que llamaba a esto en viewDidLoad :

[self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];

¡Vaya! Esta línea no es necesaria cuando se usan celdas prototipo en guiones charts. El guión gráfico configura esto automáticamente para mí. SwitchTableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Setting" forIndexPath:indexPath]; funciona bien sin llamar a registerClass:: explícitamente.

Todavía queda la pregunta de por qué llamar a registerClass:: hace que algunos sockets no se conecten.

Una solución fácil para este problema es labelr el UILabel en el prototipo y manipularlo con:

 UILabel* label = [cell viewWithTag:cellTag]; label.text = [thisServer name] 

Aquí está el motivo más obvio ( ¡lo hago todo el time! ):

¿Configuró el delegado y el origen de datos de su vista de tabla en el controller? (es decir, uno mismo)

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _tableView.delegate = self; _tableView.dataSource = self; } 

Espero que ya hayas solucionado este problema. De todos modos, dado que no veo una respuesta directa a su problema, estoy escribiendo esto.

Desde mi experiencia en el caso de utilizar Prototype cell personalizado en storyboards, también proporcione indexPath. Utilice el siguiente método:

 MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath]; 

en lugar de este código:

 NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"]; 

Cambiar esto arreglará fácilmente este problema. Verá todas las tags y vistas de image conectadas con sus valores visibles en la vista de tabla.

Me rascé la cabeza demasiado con esta. Terminé siendo que estaba declarando mis IBOutlets con retain lugar de strong en mi file CustomUITableViewCell.h. Creo que necesito investigar más sobre la gestión de la memory.

Incorrecto:

 @property (nonatomic, retain) IBOutlet UIImageView *preview; 

Correcto:

 @property (nonatomic, strong) IBOutlet UIImageView *preview; 

comtesting cómo estás inicializando tu TableViewController. Tuve el mismo problema, luego pensé que no estaba haciendo reference a mi TableViewController apropiadamente.

Así que tuve que cambiar mi código antes del "pushViewController".

En lugar de: [[TableViewController alloc]init] use: [self.storyboard instantiateViewControllerWithIdentifier:yourTableViewIdentifier]

y no te olvides de RETIRAR cualquier código que registre classs de celdas para tu tablaview como: [self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];

Espero eso ayude

Algunas cosas para probar:

Parece que sabes lo que estás haciendo, pero mencionaré lo obvio solo para recordarte. Asegúrese de que la propiedad "name" esté configurada en IBOutlet.

  • En IB puede establecer el tipo de class para el propietario de los files, Establezca esto en su class personalizada.

  • Solo por la resolución de problemas, elimine temporalmente el contenido de la queue y pruébelo.

  • Intente con otro nombre de propiedad que no sea "name". No creo que "name" exista en baseclass.

Me he topado con cosas similares como esta antes, probablemente sea algo simple.

También tuve el mismo problema (las tags eran nil en la celda).

Mi remedio era eliminar un método initWithCoder que "accidentalmente" agregué a la vista de tabla al probar otras cosas. Este método se invoca cuando la célula se inicia desde el guión gráfico. Si lo sobrescribe y no se encarga de iniciar todas las tags dentro de él, terminará sin tags.

Entonces, como un posible error para este síntoma: Verifique la presencia de este método.

 -(id)initWithCoder:(NSCoder *)decoder { self = [self init]; return self; }