1

私はiOSを初めて使用し、プログラムでUIAlertViewを閉じるのに問題があります。

アラートを.hファイルで宣言しました:

@interface ViewController : UIViewController<UIWebViewDelegate>{
    UIWebView *webView;
    UIAlertView *alert;
}

@property(nonatomic, retain) IBOutlet UIWebView *webView;
@property(nonatomic, retain) IBOutlet UIAlertView *alert;

.mファイルでは、このアラートを使用して、インターネット接続についてユーザーに警告します。

@synthesize alert;
-(void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
    case NotReachable:
    {
        NSLog(@"The internet is down.");
        self.internetActive = NO;
        alert = [[[UIAlertView alloc] initWithTitle:@"Network Unavailable" 
                                                         message:@"Internet connectivity could not be established!" 
                                                        delegate:self 
                                               cancelButtonTitle:nil 
                                               otherButtonTitles:nil] autorelease];
        [alert show];
        break;
    }
    default:
    {
        [alert dismissWithClickedButtonIndex:0 animated:NO];

    }
}

}

これで、インターネット接続がダウンすると、アラートが表示されます。ただし、インターネット接続が確立されると、プログラムはオブジェクトへのアクセス不良を訴える例外をスローします。誰かが私が間違っていることを教えてもらえますか?

4

3 に答える 3

1

1-ヘッダーファイルにUIAlertViewDelegateを実装します

2-この方法を使用する

 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

}

このメソッド内で、クリックされたボタンのインデックスに基づいてアラート ビューを閉じます

于 2012-07-18T14:01:07.113 に答える
0
[alert dismissWithClickedButtonIndex:0 animated:NO];  

他のすべてのケースで呼び出され、メソッドが呼び出されたときに alert にはまだメモリが割り当てられていません。また、その行を追加しても意味がありません。または、このようにコードを変更することもできます。

  1. Alert への参照を保持します (非常に悪い考えですが)
  2. スイッチ条件で、アラート ボックスが表示されているかどうかを確認し、[dismiss] を呼び出してアラート ビューを解放します。
于 2012-07-18T13:49:43.920 に答える
0

これはうまくいくはずです:

    default:
    {
        if (alert){
            [alert dismissWithClickedButtonIndex:0 animated:NO];
        }
    }

表示する前に、「アラート」が実際に「nil」であると仮定します。

于 2012-07-18T13:59:32.317 に答える