簡體   English   中英

在“reloadData()”之后,Table View需要花費大量時間進行刷新

[英]Table View takes a lot of time to refresh after “reloadData()”

這就是我想要做的事情:從蘋果公司的RSS獲取一個xml,其中包含有關應用程序的信息,解析它,並在UITable視圖中顯示應用程序。

問題是在“reloadData()”之后,顯示信息大約需要5秒鍾。 此外,應用程序總是在打開項目后第一次運行時崩潰。

這是項目: http//www.mediafire.com/?2dn6g916bh9uf4v

在表格中顯示緩慢加載(即基於網絡)數據的公認慣用法是,如果表格中尚未存在數據,則在單元格中顯示活動指示符,然后在后台下載數據(NSOperationQueue和NSOperation)非常適合這種情況),並在數據准備就緒時發出通知。 在將數據提供給表時,幾乎可以肯定是您自己的延遲(網絡延遲和解析時間),而不是UITabvleView在處理reloadData調用時的延遲。

編輯:更多信息,並解決延遲:

  • 代碼從主線程外部調用UI例程(“[table reloadData]”)。 這很糟糕,不要這樣做。

  • 您正試圖將圖像信息“推送”到[self loadImages]中的表中,而不是讓表格在cellForRowAtIndexPath中一次“拉”一行信息。

編輯:好的,把我的錢放在嘴邊:我做了以下更改,所有延遲都消失了(根據NSLog時間戳,它在performSelectorOnMainThread和cellForRowAtIndexPath之間約為2毫秒)。

//[table reloadData];
NSLog( @"thread: calling reload" );
[table performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
//[self loadImages];

請注意,應用程序仍然不正確,圖像尚未刷新。 請記住:在后台下載圖像,並向視圖控制器類發送新圖像可用的通知,然后調用[重新加載表](當然是從主線程中運行的通知處理程序!)。 不要從任何后台線程調用UIKit函數。 這應該足以讓您重構代碼以做正確的事情。

我也面臨同樣的問題。 我通過在UI線程上運行我的代碼解決了這個問題:

  NSOperationQueue.mainQueue().addOperationWithBlock(){
  //Perform action on main thread
    tableView.reloadData();
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM