2017-10-21 32 views
0

Cela fait maintenant une heure que je me bats avec ça et je ne comprends pas pourquoi mes cellules ne s'affichent pas dans ma table.J'ai suivi un tutoriel et j'ai fait exactement ce qu'il a dit de faire, mais ayant encore des problèmes. J'ai défini l'identificateur de réutilisation sur main, mon délégué et dataSource sont tous deux définis sur self. Je ne reçois aucune erreur dans la console et mes données arrivent de mon serveur. J'ai imprimé le titre, la description, etc. et tout était là. AideLes cellules s'affichent vides

#import "HTTPService.h" 
#import "ViewController.h" 
#import "VideoCell.h" 
#import "Video.h" 

@interface ViewController() 
@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@property (nonatomic,strong) NSArray *videoList; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 

    self.videoList = [[NSArray alloc]init]; 

    [[HTTPService instance]getTutorials:^(NSArray * _Nullable 
dataArray, NSString * _Nullable errMessage) 
    { 
     if(dataArray){ 
      NSMutableArray *arr = [[NSMutableArray alloc]init]; 

      for (NSDictionary *d in dataArray){ 
       Video *vid = [[Video alloc]init]; 
       vid.videoTitle = [d objectForKey:@"title"]; 
       vid.videoDescription = [d objectForKey:@"description"]; 
       vid.thumbnailURL = [d objectForKey:@"thumbnail"]; 
       vid.videoIFrame = [d objectForKey:@"iframe"]; 

       [arr addObject:vid]; 
      } 

      self.videoList = arr; 
      [self updateTableData]; 

     } 
     else if(errMessage) 
      NSLog(@"Alert to user: %@",errMessage); 
    }]; 


} 

-(void) updateTableData{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView reloadData]; 
    }); 
} 

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

    VideoCell *vCell = (VideoCell*)[tableView 
dequeueReusableCellWithIdentifier:@"main"]; 

    if(!vCell) 
     vCell = [[VideoCell alloc]init]; 
    NSLog(@"here heree"); 
    return vCell; 
} 

- (NSInteger)tableView:(nonnull UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section { 
    NSLog(@"hererrrr"); 
    return self.videoList.count; 
} 

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath: 
(nonnull NSIndexPath *)indexPath{ 

} 

-(void)tableView:(UITableView*)tableView willDisplayCell:(nonnull 
UITableViewCell *)cell forRowAtIndexPath:(nonnull NSIndexPath 
*)indexPath{ 
    NSLog(@"Im in this bitch"); 
    Video *vid = [self.videoList objectAtIndex:indexPath.row]; 
    VideoCell *vidCell = (VideoCell*)cell; 
    [vidCell updateUI:vid]; 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return 1; 
} 

@end 

Faites-moi savoir si vous avez besoin de voir l'un des fichiers d'importation!

enter image description here

enter image description here

enter image description here

+0

Avez-vous connecté la sortie 'tableView' dans le storyboard ou NIB? –

+0

La chose idiomatique à faire est de configurer votre cellule dans 'cellForRow:' plutôt que 'willDisplayCell'. Placez un point d'arrêt dans 'willDisplayCell:', est-ce qu'il est appelé ici? Avez-vous connecté le storyboard au point de vente? – dannyzlo

+0

@MatusalemMarques Je crois! Vérifiez l'image que je viens d'ajouter. – humbleCoder

Répondre

0

Votre code est bien, sauf pour une chose. Vous avez oublié d'enregistrer votre cellule sur votre tableView. Il suffit de mettre

[self.tableView registerNib:[UINib nibWithNibName:@"VideoCell" bundle:nil] forCellReuseIdentifier:@"main"]; 

dans votre viewDidLoad et tout ira bien. C'est une erreur commune que nous faisons tous.