3

私はここで奇妙な問題を抱えています、そして私が同じ問題を抱えている人を他に見つけていないことに驚いています。

を作成するために使用AFNetworkingしていAFJSONRequestOperationます。

初めてネットワーク接続が確立されたときに機能します。ただし、ネットワーク接続が確立されると同じコードが失敗し、「不正なURL」エラーが表示されます。

奇妙な部分は、アプリが失敗する前にサーバーにpingを送信することすらしないことです。私は、Charlesを使用してすべてのリクエストをスニッフィングしています。

他の誰かがこれを経験しましたか?

参考までに、コードは次のとおりです。

  NSURL *url = [NSURL URLWithString:JOIN_URL];
     AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

   // httpClient.parameterEncoding = AFJSONParameterEncoding;
     NSString *path = [NSString stringWithFormat:@"%@?%@",JOIN_URL, getString];

     NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:path parameters:nil];


    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request

                                                                                      success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

                                                                                          NSLog(@"SUCCESS JSON: %@", JSON);

                NSLog(@"RESPONSE URL: %@",response.URL);
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        NSLog(@"FAIL JSON: %@", JSON);
        NSLog(@"FAIL ERROR: %@", error.description);
        NSLog(@"RESPONSE URL: %@",response.URL);

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Connection Error" message:@"Cannot connect now, please try again" delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles: nil];
        [alert show];

    }];


    [operation start];
4

3 に答える 3

5

pathURL文字列を次のようにエンコードする必要があります。

NSString* escapedUrlString =[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
于 2012-11-06T17:21:36.550 に答える
5

私が理解している限りでは、指定したすべてのパスが追加されるベースAFHTTPClientURL を提供します。そして、パスを提供するときは、このパスの相対部分のみを提供します。baseURL

したがって、http://www.example.com/webservice//listAll?n=10に WebService があり、たとえば次のようないくつかのメソッドがある場合は、引数にのみを指定"listAll"し、path引数にrequestWithMethod:path:parameters:辞書@{ @"n" : @10 }を指定しparametersます。

とにかくJOIN_URLインスタンス化したときにすでにあなたを提供しているので、パスでそれを再度渡すと、内部で構築された URL に 2 回表示されます!AFHTTPClientJOIN_URLAFHTTPClient

于 2012-11-06T17:28:46.007 に答える