单元格显示为空

时间:2017-10-21 00:54:00

标签: ios objective-c

我一直在努力解决这个问题大约一个小时了,并且不明白为什么我的细胞没有出现在我的tableview中。我按照教程完成了他提到的要做的事情,但仍然有问题。我已将重用标识符设置为main,我的委托和dataSource都设置为self。我在控制台中没有收到任何错误,我的数据来自我的服务器。我打印出标题,描述等等,它就在那里。帮助

#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

如果您需要查看任何导入文件,请告诉我们!

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

你的代码很好,除了一件事。您忘记将您的单元格注册到tableView。只需加上

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

一切都会好的。 这是我们所有人都常犯的错误。