バックグラウンドでデータを取得してからUITableViewを更新するUITableViewControllerがあります。ただし、更新メソッドをバックグラウンドで実行すると、アプリ全体のすべての遷移アニメーションが中断されます (View Controller をナビゲーション スタックにプッシュするときのスライド)。奇妙なことに、まったく同じモデルが、これと非常によく似た他のクラスで機能します。バックグラウンド更新に使用している呼び出しは次のとおりです。
[self performSelectorInBackground:@selector(updateData) withObject:nil];
ただし、これは機能しますが、もちろんバックグラウンドでは実行されません。
[self updateData];
そして最後に実行されるメソッド:
- (void)updateData{
updating = YES;
[progress show:YES];
dataSource = [[NetworkHandler sharedInstance:self] getRaces];
[progress hide:YES];
updating = NO;
[self.tableView reloadData];
}
更新フラグは決してセマフォを試みるものではなく、ユーザーがビュー間を行ったり来たりした場合にビューが 2 回更新されないようにする方法にすぎません。;)