UITableView not showing first time, only when scro

2019-06-25 05:15发布

I have a UITableViewController, which is loading data from a NSURLConnection:

NSURL *url = [NSURL URLWithString:@"http://url.now"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
    if ([data length] > 0 && error == nil){
        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
        [parser setDelegate:self];
        [parser parse];
    }
    else if (error != nil){
        UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"No internet connection" message:@"Content." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:true];
    }
}];

When the parsing ends, the reloaddata method is called. But when the app is loaded, the content of the UITableView is not showing. When I scroll a bit, it get's visible immediately. Reloading is no problem.

How can this be fixed?

3条回答
Juvenile、少年°
2楼-- · 2019-06-25 05:25

Unchecking "Use Size Classes" option and then coming back and re-checking it again fixes this issue.

  • In the project navigator, select a storyboard or xib file.
  • The file’s contents open in Interface Builder.
  • Choose View > Utilities > Show File Inspector.
  • In the Interface Builder Document section, un-tick the "Use Size Classes" checkbox.
  • Leave the menu. Come back and tick the "Use Size Classes" checkbox again.
查看更多
3楼-- · 2019-06-25 05:28

What probably happened is that your table loads faster than the time it takes for your commotion to download data. Add a delegate to the class that manage your data and make your table view controller conform to that delegate protocol. Than, once data is downloaded and parsed reload the table.

查看更多
放荡不羁爱自由
4楼-- · 2019-06-25 05:32

Solved it. Changed the tableView reloadData to this:

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

And it worked like a charm. Thanks for all answers and comments.

查看更多
登录 后发表回答