2011-10-18 10 views
0

POST HTTPメソッドでURLを呼び出しています。私が3GやWiFiに接続していないとき、URLを正しく取得することは決してなく、URLからの応答を正しく取得しません。 接続はポストを介して行われます。iphoneでURLがサポートされないエラーを回避する方法

NSString *URL = [NSString stringWithFormat:@"http://www.abc.com/webservices/client_server.cfc]; 
[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

NSString *time_stamp =[NSString stringWithFormat:@"time_stamp=%@", self.today]; 

NSData *postData = [time_stamp dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 

NSMutableURLRequest *URLRequest = [[[NSMutableURLRequest alloc] init] autorelease]; 
[URLRequest setURL:[NSURL URLWithString:URL]]; 
[exhURLRequest setHTTPMethod:@"POST"]; 
[URLRequest setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[URLRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[URLRequest setHTTPBody:postData]; 


self.connection =[[[NSURLConnection alloc] initWithRequest:URLRequest delegate:self] autorelease]; 

NSAssert(self.connection != nil, @"Failure to create URL connection."); 

私は通過応答を取得する場合、私はチェックしています:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
// check for HTTP status code for proxy authentication failures 
// anything in the 200 to 299 range is considered successful 

NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

if (([httpResponse statusCode]/100) == 2) { 
    self.data = [NSMutableData data]; 

} else { 
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject: 
           NSLocalizedString(@"HTTP Error", 
               @"Error message displayed when receving a connection error.") 
                 forKey:NSLocalizedDescriptionKey]; 
    NSError *error = [NSError errorWithDomain:@"HTTP" code:[httpResponse statusCode] userInfo:userInfo]; 
    [self handleError:error]; 
} 
} 

しかし、URLが接続されていない場合、いくつかはどのように私は地下鉄か何かで午前たときに言うことができます私はURLに接続することができず、「URLがサポートされていません」というメッセージが表示されます。どのように私はそのようなシナリオを避けることができ、アプリはそのようなエラーをスローせずに進むことができますか?誰かがフロントスクリーンでユーザーを待たずにアプリにオフラインリダイレクトを使用している場合。

+0

など@、 だけ特別charecterが&のようにエンコードする必要があります(と「/」、あまりにも、それはエラーが発生する場合があります「」それはエンコードするよう) はURL全体またはベースURLをエンコードいけません確かに私は次のとおりです。 「3GまたはWifiに接続していないときは、URLを正しく取得できません」と言っています。ネットワーク接続がない場合は、実際にはどういう意味ですか?また、リクエストを作成する場所にコードを掲載することもできます。 – onnoweb

+0

@onnoweb私は自分の質問を編集しました。 – lifemoveson

答えて

3

ダウンロードapple's Reachabilityのサンプルコード。 Reachability.h + .mをプロジェクトに追加します。 Link SystemConfigurationフレームワーク。そのようなReachabilityクラスを使用します。

WiFiのための
#import "Reachability.h" 

WiFiまたは3G用
-(void)doStuff{ 
    Reachability *wifi = [Reachability reachabilityForLocalWiFi]; 
    if (wifi.currentReachabilityStatus == ReachableViaWiFi){ 
     // do connected stuff 
    } 
    else { 
     // do offline stuff 
    } 
} 

-(void)doStuff{ 
    NetworkStatus connectivity = [Reachability reachabilityForInternetConnection].currentReachabilityStatus; 
    if (connectivity == ReachableViaWiFi || connectivity == ReachableViaWWAN){ 
     // do connected stuff 
    } 
    else { 
     // do offline stuff 
    } 
} 

あなたが継続的にネットワークタスクを実行する場合は、あなたのクラスに到達可能オブジェクトを追加します。パフォーマンスが向上し、通知機能を使用できるようになります。

0

How to check for an active Internet connection on iOS or OSX?

あなたはアクティブなインターネット接続を持っていない要求を送信避けるために、ここでpropsedソリューションを使用してください。シンプル。

+0

使ったことがありますか? – lifemoveson

+0

はい、インターネット接続が必要なすべてのアプリで使用できます。接続をうまく処理できない場合、AppleはAppstoreからあなたのアプリケーションを拒否します。 – Wolfert

+0

情報ありがとうございます。しかし、それはエラーをキャッチし、接続がない場合、私は前進することができますか? – lifemoveson

1

この「URLサポートされていないエラー」は、エンコードされていないURLによるものです。

this.orを使用してこのエンコードURLにはインターネット上で多くの方法があります。私はないです

NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
                            NULL, 
                            (CFStringRef)pathRequest, 
                            NULL, 
                            (CFStringRef)@"!*'();:@&=+$,%#[]", 
                            kCFStringEncodingUTF8)); 
関連する問題