2013-12-14 33 views
4

我有一個UITableViewController,這是從一個NSURLConnection的加載數據僅當:的UITableView不顯示第一次,滾動有點

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

在viewDidLoad中,你調用'[tableView reloadData];'correct? – erdekhayser

+0

我打電話給[tableView reloadData];在parserDidEndElement中解析最後一個元素。我也試過它在viewDidLoad中,但沒有效果! –

回答

9

解決了它。將tableView reloadData更改爲:

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

它的工作方式就像一個魅力。感謝所有的答案和評論。

0

可能發生的事情是您的表加載速度比您下載數據所需的時間要快。 將委託添加到管理數據的類中,並使表視圖控制器符合該委託協議。 比數據下載並解析後重新加載表。

+0

我不這麼認爲,因爲OP說:「當解析結束時,調用reloaddata方法。」 –

+0

OP?無論如何,在那裏放一些斷點,看看第一次發生了什麼,如果你有第一次可重複使用的細胞deques的數據。 –

+0

@MichalShatz表的確是先加載的,但是當它被加載時,tableView reloadData被調用,但沒有任何反應。只有當視圖滾動一點時,所有東西纔會變得可見。 –

0

取消選中「使用大小類」選項,然後返回並再次重新檢查它可修復此問題。

  • 在項目導航器中,選擇一個故事板或xib文件。
  • 該文件的內容在Interface Builder中打開。
  • 選擇視圖>實用程序>顯示文件檢查器。
  • 在界面生成器文檔部分,取消勾選「使用大小類別」複選框。
  • 離開菜單。回來再次勾選「使用大小類別」複選框。
相關問題