我有一个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的内容不会显示。当我滚动一下时,它会立即显示出来。重新加载没问题。
如何解决这个问题?
答案 0 :(得分:8)
解决了它。将tableView reloadData更改为:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
它就像一个魅力。感谢所有的答案和评论。
答案 1 :(得分:0)
可能发生的情况是,您的表加载速度比您下载数据的时间要快。 将委托添加到管理数据的类中,并使表视图控制器符合该委托协议。 一旦数据下载并解析,就重新加载表。
答案 2 :(得分:0)
取消选中"使用大小类"选项然后再返回并重新检查它再次解决了这个问题。