2015-08-30 1 views
0

Bonjour, Je suis un nouveau venu dans la création de contrôleurs Table View. J'ai du mal à charger les données récupérées via Json dans la section ViewDidLoad, dans un contrôleur de vue de table. La première chose que j'ai remarquée est que le tableau dans lequel je place mes données json (dataArray) n'est pas disponible dans: numberOfRowsInSection, donc je l'ai déclaré en dehors de viewDidLoad mais maintenant je vois que lorsque je débogue le tableau est vide quand numberOfRowsInSection. J'ai testé le code de récupération à l'avance, donc je suis sûr que cela fonctionne. J'ai quelques questions: 1. pourquoi est ce dataArray est vide dans les autres méthodes? 2. Est-il acceptable de charger des données à afficher dans des vues de table dans ViewDidLoad ou devrais-je vraiment charger ces données ailleurs où elles sont plus visibles et utilisables par les méthodes de tableview?Création de contrôleurs de vue de table à partir des données récupérées dans View Did Load

Voici le code:

NSArray *dataArray = nil; 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

    dataArray = [[NSArray alloc] init]; 

    // Set URL variable with Token 
    NSString *token = @"99fdf505547d607e65b8b8ff16113337"; 
    NSString *teacherUrl = [NSString stringWithFormat: @"https://covle.com/apps/api/nextdoorteacher/teachers?t=%@",token]; 

    // Set up the session configuration 
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; 

    [[session dataTaskWithURL:[NSURL URLWithString:teacherUrl] 
      completionHandler:^(NSData *data, 
           NSURLResponse *response, 
           NSError *error) { 
       NSLog(@"response ==> %@", response); 

       if (!error) { 
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
        if (httpResponse.statusCode == 200){ 

         NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&error]; 

         NSLog(@" heres the serialised json ===> %@", jsonData); 
         // move serialised JSON into Array (as the data contained is in array) 

tableauDonnees = (NSArray *) [copie jsonData];

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

    // Return the number of sections. 
    return 1; 
} 

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

    // Return the number of rows in the section. 
    return dataArray.count; 
    NSLog(@"Array count is set to ===> %@", dataArray.count); 

Toute aide pour comprendre et résoudre ce problème serait grandement appréciée. Merci

Répondre

1

Pour cette NSArray *dataArray=(NSArray*)[jsonData copy]; Vous créez une nouvelle variable locale nommée tableauDonnees qui n'est pas le même que le tableauDonnees global qui u alloué à viewDidLoad, donc il suffit d'écrire ce dataArray = (NSArray*)[jsonData copy]; et vous obtiendrez le tableau compte comme prévu dans numberOfRowsInSection

EDIT: appel [self.tableview reloadData] après dataArray = (NSArray*)[jsonData copy] pour appeler les méthodes de délégué tableview au feu une fois de plus!

+0

Salut, merci pour la réponse Saheb. J'ai changé cela et je m'attendais à ce qu'il corrige le problème, mais il y a encore quelque chose qui empêche de travailler. J'ai ajouté: // déplace JSON sérialisé dans Array (comme les données contenues dans le tableau) dataArray = (NSArray *) [copie jsonData]; mais dataArray est toujours vide sur numberOfRowsInSection. – Kitcc

+0

Plz éditez votre question sur le problème et les changements que vous avez effectués. –

+0

si votre tableview ne charge pas les valeurs puis vérifiez ma réponse edit –