ユーザーが名前を入力すると、候補のテーブル ビューを表示するテキスト フィールドがあります。データ ソースのフィルター処理は、時間がかかることがあるため、バックグラウンド スレッドで行われます。
- (IBAction)personNameChanged:(UITextField *)sender
{
NSString *name = sender.text;
[backgroundThread performBlock:^{
[self.personsDataSource filterDataSourceByName:name];
[mainThread performBlock:^{
[self.autoCompleteTableView reloadData];
}];
}];
}
[UITableView reloadData]
呼び出し:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
...同期的にすべてのセル:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
...後で呼び出されます。
問題は、ユーザーがすばやく入力しているときに、filterDataSourceByName
すべてのセルが読み込まれる前に呼び出される可能性があることです。次にcellForRowAtIndexPath
、存在しない indexPath に対して呼び出されます。
reloadData の呼び出しが速すぎて、最後のリロードからすべてのセルがロードされていない場合、この問題をどのように解決する必要がありますか?