我有一個UITableView
,這應該使條目分爲部分。 數據需要處理一定的時間,因此它的工作是這樣的:UITableViewDataSource異步加載
@interface AsyncTable()
NSMutableArray* _alphaKeys;
@end
@implementation AsyncTable
-(void)refreshData {
dispatch_async(_serialQueue, ^{
<load of the _alphaKeys>
dispatch_async(dispatch_get_main_queue(), ^{
[table reloadData];
});
});
}
...
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [_alphaKeys count];
}
...
@end
現在,這個完美的作品首次。
但我的數據有時會改變,我從通知調用方法refreshData。 並且它正在開始崩潰,例如在執行numberOfSectionsInTableView
,並在cellForRowAtIndexPath
時間的陣列可以具有不同的內容的引用。
問題是時機,讓我們假設有2級呼叫的每相繼到來短: 第一個是加載完成並在主線程調度reloadData,然後第二個請求是與數據的重載啓動主線程調用之前...
任何建議如何解決這個問題?我不想把所有東西都放在主線程中(它可以工作,我現在試圖重構應用程序以使它更具響應性)
'reloadData' SUD沒有在後臺被調用,它的錯誤的方式重新加載'tableView' – Mukesh
@muku'reloadData'不是從後臺調用,這是調用主線程(請參閱上面的代碼)。或者我錯過了這一點?我想在後臺處理完成後調用reload –
嗨。 1)第一種方法是用'NSOperation'重構代碼。這是允許您取消以前的操作。 2)第二種方法是添加一個追加加載狀態的變量。在調用'[table reloadData]'之前,你需要檢查這個變量。 –