2014-04-26 138 views
5

問題是用戶界面出現,然後得到更新:給閃爍的影響。[self.tableview reloadData];導致閃爍

我希望UI只在用戶進入應用程序時更新一次,因此我已經把重新加載到ViewDidLoad ..這裏是代碼..任何幫助如何消除這種閃爍......一些代碼示例會有所幫助。

- (void)viewDidLoad { 

[super viewDidLoad]; 

self.myTableView.dataSource = self; 
self.myTableView.delegate = self; 

PFQuery * getCollectionInfo = [PFQuery queryWithClassName:@"Collection"]; // make query 

[getCollectionInfo orderByDescending:@"updatedAt"]; 
[getCollectionInfo setCachePolicy:kPFCachePolicyCacheThenNetwork]; 

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue, ^{ 
    [getCollectionInfo findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (!error) { 
      CollectionQueryResult = (NSMutableArray *)objects; 
       [self.tableView reloadData]; 


      // whenevr get result 
     } 
     else{ 
      //no errors 
     } 


    }]; 
}); 
+0

您的問題是什麼,請詳細說明您的問題。 – iPatel

+0

問題是用戶界面出現,然後得到更新:給閃爍的影響。 – user3576169

+0

我需要單元格更新沒有完整的TableView閃爍..我提到這個http://stackoverflow.com/questions/11631104/uitableview-reloaddata-how-to-stop-flicker但沒有幫助 – user3576169

回答

1

希望下面的線可以幫助你延緩和閃爍問題

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

}); 
+0

仍然閃爍.. – user3576169

+0

其實tableview只重新加載可見單元默認 –

+1

**我明白我需要做到這一點。**'[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];' **但是,這給出了一個錯誤:**'NSInternalInconsistencyException',原因:'無效的更新:在0節的行數無效。 – user3576169

1

您的下載是異步的,所以顯示的視圖之前不會完成。所以,無論你在CollectionQueryResult都會顯示。

你既可以:

  1. 清除CollectionQueryResult所以表中沒有填充,直到你得到一個更新
  2. 比較CollectionQueryResultobjects,然後更新只有在數據發生變化可見單元格(前設置CollectionQueryResult

注意,對於選項2,你還需要比較CollectionQueryResultobjects計數,然後插入/刪除[R酌情從表格視圖中刪除。選項2的全部要點是不要撥打reloadData,因此您需要做更多的工作...

如果您獲取可見單元格並直接更新它們(這可以避免任何動畫),您也可以避免調用reloadRowsAtIndexPaths發生)。見cellForRowAtIndexPath:

+0

**我明白我需要這樣做。**'[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];' **但是給出了一個錯誤:**'NSInternalInconsistencyException',原因:'無效的更新:無效的數字第0節中的行。 – user3576169

+0

如何處理這個錯誤,因爲我不通過沒有。手動設置行數 – user3576169

+0

在委託方法中返回行數。如果你更新'CollectionQueryResult',那麼你需要基於'CollectionQueryResult'的新舊內容的區別來調用'reloadRowsAtIndexPaths','insertRowsAtIndexPaths'和'deleteRowsAtIndexPaths' – Wain

3

爲什麼不直接調用reloadSections方法而不是[self.tableView reloadData];

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; 
2

請參閱cellForRowAtIndexPath委託方法。您可能正在做一些可能導致輕彈的操作。就我而言,我正在用動畫設置圖像視圖的圖像。所以無論何時重新加載表格,由於該動畫都會閃爍。

我刪除了該動畫併爲我工作..