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

时间:2013-12-14 21:02:59

标签: ios asynchronous 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的内容不会显示。当我滚动一下时,它会立即显示出来。重新加载没问题。

如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

取消选中"使用大小类"选项然后再返回并重新检查它再次解决了这个问题。

  • 在项目导航器中,选择一个storyboard或xib文件。
  • 文件的内容在Interface Builder中打开。
  • 选择视图>公用事业>显示文件检查器。
  • 在“界面生成器文档”部分中,取消选中"使用大小类"复选框。
  • 离开菜单。回过头来勾选"使用大小等级"复选框。