UITableView第一次不显示,仅在滚动时才显示

我有一个UITableViewController,它从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]; } }]; 

解析结束时,调用reloaddata方法。 但是当加载应用程序时,UITableView的内容不会显示。 当我滚动一下时,它会立即显示出来。 重新加载没问题。

怎么解决这个问题?

解决了它。 将tableView reloadData更改为:

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

它就像一个魅力。 感谢所有的答案和评论。

可能发生的是,您的表加载速度比您下载数据的时间要快。 将委托添加到管理数据的类中,并使表视图控制器符合该委托协议。 一旦数据下载并解析,就重新加载表。

取消选中“使用大小类”选项,然后返回并再次重新检查它可以解决此问题。

  • 在项目导航器中,选择storyboard或xib文件。
  • 该文件的内容在Interface Builder中打开。
  • 选择“视图”>“实用程序”>“显示文件检查器”。
  • 在Interface Builder Document部分中,取消选中“Use Size Classes”复选框。
  • 离开菜单。 返回并再次勾选“使用大小类”复选框。