0

サービス URL から xml 応答を取得していますが、ネットワーク接続が失敗したときにエラーを表示したいと考えています。そこでUIAlertViewを表示するのですが、残りの処理が終わってからこのalertViewが表示されてしまいます。早く見せてほしい。

Android では、ネットワーク接続に失敗した場合、「残念ながらアプリ名が終了しました」というエラー アラートが表示されます。iPhoneにそのようなものはありますか?そうでない場合は、アラートビューを表示して残りのプロセスを停止します。

これは私が取り組んでいるコードです:

if (responseData!= NULL)
        {
            response = [[NSString alloc] initWithData:responseData 
                                             encoding:NSUTF8StringEncoding ];
            NSLog(@"Response Code:%d",[urlResponse statusCode]);
            if([urlResponse statusCode ]>=200 && [urlResponse statusCode]<300)
            {
                NSLog(@"Response:%@",response);
            } 
        }
        else
        {
            NSLog(@"Failed to send request: %@", [error localizedDescription]);

              UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unfornately  stopped.Try Again " message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
               [alert show];
               [alert release];
        }  

        parser =[[NSXMLParser alloc]initWithData:responseData];
        [parser setDelegate:self];
        [parser setShouldProcessNamespaces:NO];
        [parser setShouldReportNamespacePrefixes:NO];
        [parser setShouldResolveExternalEntities:NO];
        currentHtmlElement=@"1";
        [parser parse];
        [parser release]; 

私のコードでは、リクエストの送信に失敗した場合、NSLog が出力され、alertView コードが実行されます。同時に、残りのプロセス、つまりパーサーの初期化と残りの操作を停止したいと考えています。

どうすればいいですか?

4

2 に答える 2

0

非常に簡単です...解析コードをifブロック内に移動します。

    if (responseData!= NULL)
    {
        response = [[NSString alloc] initWithData:responseData 
                                         encoding:NSUTF8StringEncoding ];
        NSLog(@"Response Code:%d",[urlResponse statusCode]);
        if([urlResponse statusCode ]>=200 && [urlResponse statusCode]<300)
        {
            NSLog(@"Response:%@",response);
        }

        parser =[[NSXMLParser alloc]initWithData:responseData];
        [parser setDelegate:self];
        [parser setShouldProcessNamespaces:NO];
        [parser setShouldReportNamespacePrefixes:NO];
        [parser setShouldResolveExternalEntities:NO];
        currentHtmlElement=@"1";
        [parser parse];
        [parser release];
    }
    else
    {
        NSLog(@"Failed to send request: %@", [error localizedDescription]);

          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unfornately iCloudBiz has stopped.Try Again " message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

           [alert show];
           [alert release];
    } 

ところで... Androidのアプリの動作について次のように言及しました

Android では、ネットワーク接続に失敗すると、残念ながらアプリ名が終了したというエラー アラートが表示されます。

この動作は異常な動作であることをご理解ください。これはクラッシュと呼ばれ、適切に処理する必要があります。ネットワークが切断されている場合、アプリは終了/クラッシュせずにメッセージを表示する必要があります:)

于 2012-12-29T09:33:18.833 に答える
0

Reachability クラスを使用して、インターネット接続が利用可能かどうかを確認する必要があります。これは、その仕組みを理解するためのサンプル コードです。

Reachability *reachability = [Reachability reachabilityForInternetConnection];    
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
if (internetStatus != NotReachable) {
//my web-dependent code
}
else {
//there-is-no-connection warning
}
于 2012-12-29T10:44:54.457 に答える