Объявите свойство на контроллере представления, которое вы хотите показать представление.
@interface DownloadViewController : UIViewController
{
UIAlertView *downloadAlertView;
}
@property (retain) UIAlertView *downloadAlertView;
@end
Затем, когда вы обнаружите ошибку, установите свойство downloadAlertView контроллера представления (это потребует от вас сохранения ссылки на этот контроллер представления объектом, выполняющим загрузку).
- (void)downloadFailed
{
UIAlertView *alertView = [[[UIAlertView alloc] init] autorelease];
alertView.title = @"Download Failed";
downloadViewController.downloadAlertView = alertView;
}
Тогда в вашей DownloadViewController
реализации,
- (UIAlertView *)downloadAlertView
{
return downloadAlertView;
}
- (void)setDownloadAlertView:(UIAlertView *)aDownloadAlertView
{
// standard setter
[aDownloadAlertView retain];
[downloadAlertView release];
downloadAlertView = aDownloadAlertView;
// show the alert view if this view controller is currently visible
if (viewController.isViewLoaded && viewController.view.window)
{
[downloadAlertView show];
downloadAlertView = nil;
}
}
- (void)viewDidAppear
{
if (downloadAlertView)
{
[downloadAlertView show];
downloadAlertView = nil;
}
}
Быстрое объяснение:
- первые два метода являются стандартными методами получения / установки, но установщик добавил логику, так что если контроллер представления в настоящее время виден, предупреждение показывается немедленно.
- в противном случае представление оповещения сохраняется контроллером представления и отображается, как только оно появляется.