2012-03-13 6 views
0

バックグラウンドでダウンロードが実行されています。 UIAlertViewをいくつかの失敗状態で示しています。関連するviewControllerが表示されるまで、UIAlertViewの表示を遅らせます。

このアラートが発生すると、アプリケーションはユーザーに表示されているビューのいずれかにある可能性がありますが、そのいずれかに表示されている必要があります。

UIAlertViewの表示を、関連付けられているviewControllerがユーザーに表示されるまで延期できます(viewDidAppearメソッドが呼び出されます)。

答えて

2

ビューを表示するビューコントローラーのプロパティを宣言します。その後

@interface DownloadViewController : UIViewController 
{ 
    UIAlertView *downloadAlertView; 
} 

@property (retain) UIAlertView *downloadAlertView; 

@end 

あなたがエラーを検出したときに、(これはダウンロードを行っているオブジェクトによって、このビューコントローラへの参照を維持するあなたが必要となります)ビューコントローラのdownloadAlertViewプロパティを設定します。あなたのDownloadViewController実装に続いて

- (void)downloadFailed 
{ 
    UIAlertView *alertView = [[[UIAlertView alloc] init] autorelease]; 
    alertView.title = @"Download Failed"; 
    downloadViewController.downloadAlertView = alertView; 
} 

- (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; 
    } 
} 

クイック説明:

  • 最初の2つの方法は、標準的なゲッター/セッターですが、セッターは、ロジックを追加しました、もしそうView Controllerが現在表示されている場合は、アラートがすぐに表示されます。
  • の場合、アラートビューはビューコントローラによって保存され、ビューが表示されるとすぐに表示されます。
+0

ニースアプローチ。私はそれですが、 '(viewController.isViewLoaded && viewController.view.window)'条件付きの説明はできますか? '(self.navigationController.visibleViewController == self)'と同じですか? –

+0

コードdownloadAlertViewでself.downloadAlertViewを参照してはいけませんか? –

+0

setterの名前を確認します.setDownloadAlertViewにする必要があります。 –

関連する問題