Скорее всего, вы страдаете от блокировки потока системных событий: выполняете ли вы этот метод, когда вы вызываете [updateStatistics updateThe2010Statistics];
, из какого-либо обратного вызова IBAction или любого другого метода, который запускается системой (например, -viewDidLoad
, -viewWillAppear
или аналогичный)?
В этом случае ваша долгосрочная задача заблокирует поток событий, который, в свою очередь, не сможет обновить ваш индикатор активности.Попробуйте сделать следующее:
...
else if ([theSelection isEqualToString: @"Update statistics"])
{
[self startTheAnimation];
[self performSelectorInBackground:@selector(doUpdateStatistics) withObject:nil];
}
...
- (void) doUpdateStatistics {
[updateStatistics updateThe2010Statistics];
[self performSelectorOnMainThread:@selector(stopTheAnimation) withObject:nil waitUntilDone:NO];
}
Это выполнит обновление вашей статистики во втором потоке, чтобы ваш поток событий мог правильно обновить индикатор активности.В конце обновления статистики мы снова вызываем анимацию остановки в главном потоке (т.е. в потоке событий), чтобы остановить индикатор вашей активности.