ReloadData Crashing Aplicación iOS

Estoy haciendo una solicitud de Twitter para datos de API con:

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://search.twitter.com/search.json?q=a2zwedding&include_entities=true"] parameters:nil requestMethod:TWRequestMethodGET];

entonces obtengo todo el procesamiento de la solicitud con:

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    // NSString *output;
    NSArray *results;

    if ([urlResponse statusCode] == 200) {
        NSError *jsonParsingError = nil;
        NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
        results = [publicTimeline objectForKey:@"results"]; 
    }
    [self performSelectorOnMainThread:@selector(populateTable:) withObject:results waitUntilDone:YES];        
}];

Luego estoy tratando de mostrar los "resultados" en un UITableView. Mi delegado y mi fuente de datos son el mismo controlador de vista que procesa los datos JSON. Mi método de fuente de datos de:

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

devuelve cero si trato de hacer el recuento de mi matriz porque mi análisis JSON no ha terminado cuando se llama. Si "devuelvo 1" con este método, muestra correctamente uno de los resultados de mi solicitud de Twitter. Sin embargo, si uso reloadData, mi aplicación se bloquea. No puedo conseguir que retrase el recuento. ¿Algunas ideas?

preguntado el 10 de marzo de 12 a las 02:03

¿Cómo está creando su vista de tabla y cómo está llamando a reloadData? -

Además, es útil publicar el error que recibe cuando falla. -

Parece que no está conservando sus datos. Ver su populateTable: implementación sería útil. Además, debe inicializar la variable de resultados cuando la declare o establecerla en nil si el statusCode no es 200. -

1 Respuestas

en .h

//use this as your datasource
@property(nonatomic, strong)NSArray *myResultData;

.m

@synthesize myResultData;

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
// NSString *output;
NSArray *results;

if ([urlResponse statusCode] == 200) {
    NSError *jsonParsingError = nil;
    NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
    results = [publicTimeline objectForKey:@"results"]; 
    if(![results isKindOfClass:[NSNull class]])
       {
          myResultData = [NSArray alloc]initWithArray:results];
       }
       [self.tableView reloadData];
}
}];

respondido 10 mar '12, 07:03

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