Celdas de UITableView vacías

Tengo un problema real con mi UITableView, déjame guiarte.

Tengo un UITableViewController en mi guión gráfico que tiene cuatro celdas prototipo diferentes, cada una con sus propios identificadores.

Entonces tengo esto en mi clase para el controlador:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"name";

    if (indexPath.section == 0) CellIdentifier = @"name";
    else if (indexPath.section == 1) CellIdentifier = @"name";
    else if (indexPath.section == 2 && indexPath.row == 0) CellIdentifier = @"segment";
    else if (indexPath.section == 2 && (indexPath.row == 1 || indexPath.row == 2 || indexPath.row == 3)) CellIdentifier = @"switch";
    else if (indexPath.section == 3) CellIdentifier = @"segment";
    else if (indexPath.section == 4) CellIdentifier = @"segment2";
    else if (indexPath.section == 5) CellIdentifier = @"name";
    else if (indexPath.section == 6) CellIdentifier = @"name";
    else if (indexPath.section == 7) CellIdentifier = @"name";

    GuestDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[GuestDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    //Configure my cells here, like so:
    if (indexPath.section == 0)
    {
        cell.title.text = @"title";
    }
    else if (indexPath.section == 1)
    {

    }
    //etc

    return cell;
}

Creo que aquí es donde radica mi problema, ya que he tenido éxito con un código diferente (que agregaré si necesita verlo, hágamelo saber.

El número correcto de celdas se muestra en la tabla y el número correcto de secciones y, si selecciona una celda, lo lleva al subcontrolador de vista correcto, pero las celdas reales en sí mismas están en blanco. ¿Por qué podrían estar todos volviendo cero?

Ahora, cuando se muestra la vista, todas las celdas están en blanco. cell = [[GuestDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; Esto parece ser llamado una y otra vez, a diferencia de mis celdas como se muestran configuradas.

Llego a esta vista llamando a este código:

- (void)addNewGuest
{
    newGuestViewController *addGuestViewController = [[newGuestViewController alloc] initWithStyle:UITableViewStylePlain];
    addGuestViewController.delegate = self;

    //Create a new managed object context for the new guest -- set its persistent store coordinator to the same as that from the fetched results controller's context.
    NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init];
    self.addingManagedObjectContext = addingContext;

    [addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];

    addGuestViewController.guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:addingContext];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addGuestViewController];

    [self.navigationController presentModalViewController:navController animated:YES];
}

¿Alguna idea o necesita más información?

Gracias.

preguntado el 27 de julio de 12 a las 17:07

en primer lugar: asegúrese de escribir sus clases e instancias en el camelCasing correcto. ¡Las clases SIEMPRE comienzan en mayúsculas y las instancias en minúsculas! -

Las celdas no son nulas, eso sería una excepción en tiempo de ejecución y un bloqueo. Comenzaría inspeccionando la celda en el depurador, particularmente sus propiedades: ¿cómo y cuándo está creando todas las etiquetas, etc. en la celda? -

Pensé que algo interesante era que si pongo cell.textLabel.text = @"test"; en la instrucción if que verifica si la celda es igual a cero, todas mis celdas muestran el texto de 'prueba'. Asi que cell = [[GuestDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; está siendo llamado cuando no debería ser correcto? ¿Seguramente eso anula mi personalización de las celdas? -

Habiendo dicho eso, creo que tiene razón, podría tener que ver con la forma en que estoy usando las UILabels. Simplemente dejé caer mi etiqueta en la celda en mi guión gráfico y conecté los puntos de venta a mi clase de celda personalizada (que simplemente tiene una declaración de las etiquetas, nada más). Entonces en mi cellForRowAtIndexPath método, solo cambio el texto según el indexPath según sea necesario. Entonces, ¿cómo exactamente debería manejarlos? -

Debe tener los mismos identificadores de reutilización establecidos en el guión gráfico que está usando en el código. Si haces eso, dequeue siempre devuelve una celda y nunca necesitarás instanciar una. -

1 Respuestas

Esto me volvió loco. Me dejó perplejo justo en frente del cliente. El comentario de jrturton tenía la respuesta que necesitaba. Superó esta pregunta inicialmente ya que no tenía ninguna respuesta. Publicar el comentario de jrturton como respuesta para que sea menos probable que se pase por alto. Aquí está su comentario (respuesta):

Debe tener los mismos identificadores de reutilización establecidos en el guión gráfico que está usando en el código. Si lo hace, la eliminación de la cola siempre devolverá una celda y nunca necesitará crear una instancia.

Respondido 17 Abr '13, 02:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.