0

パラメータとしてjsonオブジェクトを取るWebサービスを使用しています。これが私のコードです:

    -(void)createHttpHeaderRequest {

        NSString *x = @"{\"GetVehicleInventory\": {\"ApplicationArea\": {\"Sender\": {\"ComponentID\":}}}" (something like that)

        NSString *sample = [NSString stringWithFormat:@"https://trialservice.checkitout?XML_INPUT=%@",x];
 NSString * final = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)sampleReq, NULL, CFSTR(":/?#[]@!$&'()*+,;=\""), kCFStringEncodingUTF8);
 NSMutableRequest *request = [NSMutableREquest requestWithURL:[NSURL URLWithString:final]];
    NSURLConnection * theConnection = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self];
        if (theConnection) {
            NSLog(@"Service hit");
        }
    }

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        NSError * error;
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
        NSArray * categories = [dict objectForKey:@"category"];
        [self.delegate giveControlBackToController:categories];

    }

NSLog サンプルを試してみると、完全な URL が返され、ブラウザに貼り付けると結果が返されますが、リクエストで NSLog を呼び出すと、null が表示され、その後何も起こりません。コントロールがその NSURLConnection デリゲート メソッドに移動することはありません。

4

2 に答える 2

1

秘訣は、ほとんどのブラウザーが URL を自動的にエスケープするのに対し、NSURL はエスケープしないことです。手動で行う必要があります。CFURLCreateStringByAddingPercentEscapes関数を見てください。

于 2012-07-25T18:54:29.163 に答える
0

これはおそらく回答ではなくコメントである必要がありますが、残念ながらコメント内のコードをフォーマットすることはできません。次のメソッドをデリゲートに追加し、呼び出されるかどうかを確認します。もしそうなら、その反応が何であるか教えてください。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    NSLog(@"Connection response code: %d", httpResponse.statusCode);
}
于 2012-07-25T20:13:07.990 に答える