我的 tableViewCells 没有创建?

Posted

技术标签:

【中文标题】我的 tableViewCells 没有创建?【英文标题】:My tableViewCells not created? 【发布时间】:2017-04-18 05:23:46 【问题描述】:

我正在处理 JSON,在我的程序中首先调用了我的 tableView 委托方法,然后我成功地从服务器获取数据,但我想根据我们从服务器获得的记录数在 tableView 中创建行。怎么样?

我的代码是.....

- (void)viewDidLoad 
[super viewDidLoad];

self.displayDataTableView.delegate = self;
self.displayDataTableView.dataSource = self;


self.dateArray = [[NSMutableArray alloc]init];
self.amountArray = [[NSMutableArray alloc]init];

self.urlSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
self.urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"My host name"]];
self.dataTask = [self.urlSession dataTaskWithRequest:self.urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 

    NSMutableDictionary *serverRes = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    //        NSLog(@"...%@ ", serverRes);

    self.integer = [[serverRes objectForKey:@"Data"] count];
    NSLog(@"************* = %lu", self.integer);

    for (int i=0; i<self.integer; i++) 
        [self.dateArray addObject:[[[serverRes objectForKey:@"Data"] objectAtIndex:i] objectForKey:@"Date"]];
        [self.amountArray addObject:[[[serverRes objectForKey:@"Data"] objectAtIndex:i] objectForKey:@"TotalAmount"]];


    

    NSLog(@"Date Array : %@", self.dateArray);

];

[self.dataTask resume];



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

return 1;


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

return self.integer;


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


if(indexPath.row == 0)

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailsCell" forIndexPath:indexPath];

    return cell;
else
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailsTitle" forIndexPath:indexPath];


    return cell;




谁能帮帮我.....

【问题讨论】:

获得数据后,只需重新加载 mainQueue 中的 tableView。 【参考方案1】:

您需要检查空单元格并使用相同的标识符创建新单元格

    if(indexPath.row == 0)
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailsCell" forIndexPath:indexPath];
        if (!cell) 
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"detailsCell"];
        
        return cell;
    else
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailsTitle" forIndexPath:indexPath];
        if (!cell) 
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"detailsTitle"];
        


        return cell;


    

或者在从服务器获取数据时重新加载tableview

     self.integer = [[serverRes objectForKey:@"Data"] count];
        NSLog(@"************* = %lu", self.integer);

        for (int i=0; i<self.integer; i++) 
            [self.dateArray addObject:[[[serverRes objectForKey:@"Data"] objectAtIndex:i] objectForKey:@"Date"]];
            [self.amountArray addObject:[[[serverRes objectForKey:@"Data"] objectAtIndex:i] objectForKey:@"TotalAmount"]];

        
[tblview reloadData];

【讨论】:

不,它没有创建任何单元格。 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section return self.integer; 我正在传递 return self.integer;这个,但是调用上面的委托方法后可以得到self.integer值。 现在尝试另一个答案 这是另一个问题。您需要检查您的互联网连接和服务器端代码。【参考方案2】:

UITableView 在登陆该视图时已经创建,因此您需要在从服务器获取结果后重新加载 UITableView

self.integer = [[serverRes objectForKey:@"Data"] count];
NSLog(@"************* = %lu", self.integer);
dispatch_async(dispatch_get_main_queue(), ^
        [self.displayDataTableView reloadData];
    );

这对我来说是正确的解决方案....

【讨论】:

兄弟它已成功重新加载.. 但是创建单元格需要一些时间,我正在立即从服务器获取数据... 它在控制台上显示此消息...在从主线程访问引擎后,此应用程序正在从后台线程修改自动布局引擎。这可能导致引擎损坏和奇怪的崩溃。堆栈:( ` if (!cell) \\code \\ ` 使用它来创建单元格。 dispatch_async(dispatch_get_main_queue()) // Do stuff to UI 在其中添加您的服务器调用以跳出主线程以调用 reloadData【参考方案3】:

使用这个。

- (void)viewDidLoad 
[super viewDidLoad];

self.displayDataTableView.delegate = self;
self.displayDataTableView.dataSource = self;


self.dateArray = [[NSMutableArray alloc]init];
self.amountArray = [[NSMutableArray alloc]init];

self.urlSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
self.urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"API Name"]];
self.dataTask = [self.urlSession dataTaskWithRequest:self.urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 

    NSMutableDictionary *serverRes = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    //        NSLog(@"...%@ ", serverRes);

    self.integer = [[serverRes objectForKey:@"Data"] count];
    NSLog(@"************* = %lu", self.integer);

    for (int i=0; i<self.integer; i++) 
        [self.dateArray addObject:[[[serverRes objectForKey:@"Data"] objectAtIndex:i] objectForKey:@"Date"]];
        [self.amountArray addObject:[[[serverRes objectForKey:@"Data"] objectAtIndex:i] objectForKey:@"TotalAmount"]];


    

    NSLog(@"Date Array : %@", self.dateArray);
dispatch_async(dispatch_get_main_queue(), ^
    [self.displayDataTableView reloadData];
);
];

[self.dataTask resume];



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

return 1;


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

return self.integer;


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


if(indexPath.row == 0)

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailsCell" forIndexPath:indexPath];

    return cell;
else
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailsTitle" forIndexPath:indexPath];


    return cell;




【讨论】:

以上是关于我的 tableViewCells 没有创建?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Plist 创建带有字幕的 TableViewCell

View Controller Nav 中的 iOS Refresh 按钮:单击时重新加载从解析的 JSON 创建的所有 tableViewCell

为 TableViewCell 创建 UI 按钮

Swift Xcode TableViewCell 没有第一次加载

TableViewCell 中的动态高度不起作用

Xcode:当我将我的应用程序加载到模拟器或设备上时,tableViewCells 中没有出现任何内容