Pregunta

Estoy tratando de cargar datos en la aplicación a medida que las células aparecen en la vista, de modo que una vez que presionen el botón Accesorio de la celda, tendrá los datos cargados.

Mi problema es que estoy usando AFnetworking y estoy usando este código de bloque:

[Request fullRequestWithBlock:^(NSArray *detailedReqFromWeb, NSError *error) {
        if (error) {

            [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
        } else {

            NSArray *objs = [NSArray arrayWithObjects: [detailedReqFromWeb objectAtIndex: 0], [detailedReqFromWeb objectAtIndex: 1], [detailedReqFromWeb objectAtIndex: 2], [detailedReqFromWeb objectAtIndex: 3], [detailedReqFromWeb objectAtIndex: 4], [detailedReqFromWeb objectAtIndex: 5], nil];
            NSArray *keys = [NSArray arrayWithObjects:@"Risk", @"Destination", @"Source", @"Customer", @"Subcategory", @"Deployment", nil];

            NSMutableDictionary *detailsforRequestDictionary = [[NSMutableDictionary alloc] initWithObjects:objs forKeys:keys];

            [request addEntriesFromDictionary: detailsforRequestDictionary];

            NSLog(@"%@ Finished Loading", [idNumbers objectAtIndex:row]);
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        }

    } forID: [[idNumbers objectAtIndex:row] substringFromIndex:1]];

Básicamente, estoy tratando de cambiar el tipo de accesorio desde el indicador al botón de divulgación una vez que se carguen los datos, por lo que puedo realizar un Segue a otra visión donde se mostrarán los datos que cargados.

Mi problema es que está cambiando la celda.accessyType al botón antes de que haya terminado de cargarse.La debug NSLOG realiza realmente cuando finaliza la carga.

¿Cuál es la mejor manera de habilitar solo el botón cuando se hace cargar?Supongo que la solicitud no está siendo procesada por el hilo principal.¿Cómo es que me notifiquen que la solicitud ha terminado de procesamiento para que pueda cambiar los accesorios?

¡Gracias!

¿Fue útil?

Solución

A menos que no recicle las celdas, nunca debe mantener una referencia celular como los datos que representa cambiarán a medida que el usuario se desplaza.La forma correcta es enviar un bloque en la cola principal que actualiza una entrada de la tabla en la sección / coordenadas de la fila.Su código se comprueba para ver si esa celda es visible, entonces la actualiza.También registrará el estado de alguna otra manera, de modo que cuando la mesa se desplaza al estado correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top