Pergunta

Eu estou tentando carregar os dados para o aplicativo como as células entram em modo de exibição de modo que, uma vez que pressione a célula é acessório botão que vai ter os dados carregados.

O meu problema é que eu estou usando AFNetworking e eu estou usando este bloco de código:

[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]];

Então, basicamente, eu estou tentando mudar o acessório tipo de indicador para a divulgação botão uma vez que os dados são carregados então eu posso realizar uma transição para outro modo de exibição, onde os dados que são carregados vai ser mostrado.

O meu problema é que ele está mudando a célula.accessoryType para o botão antes que ele tenha terminado de carregar.A depuração NSLog, na verdade, saídas quando, na verdade, terminar de carregar.

Qual é a melhor maneira para habilitar somente o botão quando é feito o carregamento?Eu estou supondo que o pedido não está sendo processado pela thread principal.Como é que eu seja notificado de que a solicitação foi concluída processamento para que eu possa mudar accessoryTypes?

Obrigado!

Foi útil?

Solução

A menos que você não reciclar células, você nunca deve manter uma referência de célula em torno de como os dados que ele representa será alterado conforme o usuário navega.O caminho certo é para despachar um bloco em fila principal que atualiza uma tabela de entrada na seção/em linha coordenadas.O código, em seguida, verifica se que a célula é visível, em seguida, atualiza-lo.Seria também o status de registro de alguma outra forma, de modo que, quando a mesa desloca-se o estado correcto é aplicada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top