2015-09-01 88 views
3

我有一個功能,打開表視圖中的所有部分。numberOfRowsInSection調用後太多時間reloadData

很奇怪,當[self.tvChoices reloadData];是所謂的,我得到了

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

被稱爲只爲有形項目每個部分(1300),而不是。

有什麼想法?

(也許我應該只是清潔reloadData前的tableview,但我很好奇,爲什麼這種行爲

-(IBAction)multipleTap:(UIGestureRecognizer *)sender { 
    NSLog(@"--[%s:%d]",__PRETTY_FUNCTION__,__LINE__); 
    NSNumber *value=self.mybooleans[sender.view.tag]; 
    [self reset_Sections_BooleansTo:@(!value.boolValue)]; 
    [self.tvChoices reloadData]; <-- 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

- 甚至叫不可見部分

+0

您是否嘗試過使用UITableView.reloadSections(_:withRowAnimation :)而不是? – quark

+0

我可以試試。但是,什麼是不酷,是我將不得不管理女巫部分將需要更新。 (動作「打開」每個部分的內容,因此,當部分關閉時,我只能看到標題,當我打開所有部分時,可能只有第一部分會出現(另一個不需要重新加載) – Franck

+0

你確定它調用了1300而不是無限循環嗎?你可以通過調試器來檢查它 –

回答

0

這種行爲是有道理的,因爲表格視圖需要估計滾動指標有多大,爲此,需要知道表格視圖中有多少行總數,因此需要詢問每個部分有多少行。

如果它不是您的應用程序的主要性能影響,請不要擔心。擔心被調用的方法有多少次,並試圖減少它以避免顯着的性能增益,這是嚴重的過早優化,很少值得工作和錯誤導致。

如果性能受到影響,正如一些評論者指出的那樣,您可以查看- reloadRowsAtIndexPaths:withRowAnimation:- reloadSections:withRowAnimation:以僅重新加載需要更新的行/部分。

相關問題