У меня есть диспетчер модального представления, который появляется, проверяет сервис в Интернете и затем увольняет себя, когда это делается. Наконечник содержит индикатор активности и метку, чтобы информировать пользователя о том, что происходит.performSelector: withObject: afterDelay: не работает на контроллере modal view
Когда обновление будет завершено, ярлык изменится на «Обновить завершен», а затем отклонит контроллер вида. Тем не менее, я хочу, чтобы он отложил увольнение на пару секунд, чтобы дать пользователю возможность увидеть текст до его исчезновения. Поэтому я сделал это:
#pragma mark - AssetLoaderServiceDelegate
- (void)assetLoaderServiceDidFinishLoading:(AssetLoaderService *)service
{
[self.spinner stopAnimating];
self.infoLabel.text = @"Update complete";
[self performSelector:@selector(dismissUpdater) withObject:nil afterDelay:2.0];
}
- (void)dismissUpdater
{
[self dismissModalViewControllerAnimated:YES];
}
Но по какой-то причине селектор никогда не вызывается. Я тоже пытался запустить его в режиме NSRunLoopCommonModes
, но это тоже не работает.
я должен делать что-то неправильно, но я не могу увидеть, что ...
EDIT: Делегат обратного вызова на самом деле происходит внутри NSOperationQueue
, что может означать, что это не в том же потоке, когда он посылает сообщение обратно в контроллер просмотра? Так что я попытался
[self performSelector:@selector(downloadQueueComplete) withObject:nil afterDelay:0.0 inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
следуют
- (void)downloadQueueComplete
{
[delegate assetLoaderServiceDidFinishLoading:self];
}
Но не кажется performSelector работать и здесь.
ли увольнение упущеного не вызвано, или уклонение методаModalViewControllerAnimated не работает? – rishi
Вы имеете в виду: 1. вызывается 'assetLoaderServiceDidFinishLoading'; 2. Модальный просмотр всегда там? – sergio
@rishi - Я имею в виду, что увольнение не получает. – jowie