0

Je récupère des données du serveur et je ne parviens pas à les afficher en tableview ... Je stocke des données dans jsonarray variable ... mais il montre jsonarray.count comme zéro gestionnaire de complétion. (dans aucune des rangées numberOfRowsInSection).Impossible d'afficher les données dans la tableview

@interface Staffdir() 
@property(nonatomic,strong) NSMutableArray* jsonarr; 
@end 

@implementation Staffdir 

- (void)viewDidLoad { 

    _namesarr=[[NSMutableArray alloc]init]; 
    _occupationarr=[[NSMutableArray alloc]init]; 
    _Phonearr=[[NSMutableArray alloc]init]; 
    _faxnumarr=[[NSMutableArray alloc]init]; 

    NSMutableURLRequest*req=[[NSMutableURLRequest alloc]init]; 
    NSURL*url=[NSURL URLWithString:@"http:someurl"]; 
    [req setURL:url]; 


     [[[NSURLSession sharedSession]dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
      self.jsonarr = [NSJSONSerialization JSONObjectWithData:data 
                  options:kNilOptions 
                  error:&error]; 

      NSDictionary *dict=[[NSDictionary alloc]init]; 

      for(int i=0;i<self.jsonarr.count;i++){ 

       dict=[self.jsonarr objectAtIndex:i]; 

       [_namesarr addObject:[dict objectForKey:@"Name"]]; 
       [_faxnumarr addObject:[dict objectForKey:@"Fax_Number"]]; 
       [_Phonearr addObject:[dict objectForKey:@"Phone"]]; 
       [_occupationarr addObject:[dict objectForKey:@"Job_Title"]]; 
      } 
     }] resume]; 


    [self.tableview reloadData]; 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view. 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return self.jsonarr.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    Staffcustom *cell= [tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if (cell == nil) { 
     cell = [[Staffcustom alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    cell.namelabel.text=[_namesarr objectAtIndex:indexPath.row]; 
    cell.namelabel.textColor = [UIColor blueColor]; 
    cell.occupationlabel.textColor=[UIColor colorWithRed:0.5 green:0.0 blue:1 alpha:1.0]; 
    cell.occupationlabel.text=[_occupationarr objectAtIndex:indexPath.row]; 
    [email protected]"12345678"; 
    [email protected]"12345678"; 

    UIView * additionalSeparator = [[UIView alloc] initWithFrame:CGRectMake(0,cell.frame.size.height-1,cell.frame.size.width,0.1)]; 
    additionalSeparator.backgroundColor = [UIColor blueColor]; 

    [cell addSubview:additionalSeparator]; 

    return cell; 
} 

- (IBAction)Btn_Back:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
+0

'dataTaskWithRequest' est déjà asycn, pas besoin d'appeler une répartition dessus. Vous devez appeler '[self.tableview reloadData];' dans le gestionnaire d'achèvement. – Larme

+0

Etes-vous sûr que les données renvoyant la requête ont des valeurs? au cas où c'est oui, montrez-nous la structure de réponse de JSON s'il vous plaît? – DiegoQ

+0

Essayez ce NSDictionary * response = [[NSDictionary alloc] init]; response = [[NSMutableArray alloc] init]; pour (int i = 0; i <[[responseDict valueForKey: @ "dictonaryName"] count]; i ++) { [réponse addObject: [[responseDict valeurForKey: @ "nom"] objectAtIndex: i]]; } [self.tableView reloadData]; –

Répondre

1

essayez ceci:

données geting du serveur

[json PostMethod:method parameters:parameter success:^(NSDictionary *responseDict){ 

     response=[[NSMutableArray alloc]init]; 
     for (int i=0; i < [[responseDict valueForKey:@"transactions"] count]; i++) { 
      [response addObject:[[responseDict valueForKey:@"transactions"]objectAtIndex:i]]; 
     } 

     [self.tableView reloadData]; 

TableviewCell Format

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 

    if(cell == nil){ 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 

     if ([response count] > 0) { 
      //creating the status lable 
      UILabel * name = [[UILabel alloc]initWithFrame:CGRectMake(80*XScale, 25*YScale, XScale*200, YScale*15)]; 

      name.font = [UIFont fontWithName:@"STHeitiSC-Medium" size:12.0f]; 
      NSString *time=[[response objectAtIndex:indexPath.row]valueForKey:@“name”]; 
      [cell.contentView addSubview:name]; 

vérifier, si u encore face erreur me mettre à jour. je vais aider, si Si vous fournissez votre réponse, cela m'aidera à résoudre le problème facilement.