0

こんにちは、私はこのコードを持っています。

NSString *urlToAuthPage = [[NSString alloc] initWithFormat:@"&name=%@&street=%@&city=%@&state=%@&zip=%@&lat=%@&lon=%@&hash=%@", name, street, city, state, zip, str1, str2, hash];

        NSData *postData = [urlToAuthPage dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
        NSString *postLength = [NSString stringWithFormat:@"%d",[urlToAuthPage length]];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://oo.mu/partyapp/post-party.php"]]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];        


        NSString *infoString = [NSString stringWithFormat:@"http://oo.mu/partyapp/post-party.php?name=%@&street=%@&city=%@&state=%@&zip=%@&lat=%@&lon=%@&hash=%@", name, street, city, state, zip, str1, str2, hash];
        NSURL *infoUrl = [NSURL URLWithString:infoString];
        NSData *infoData = [NSData dataWithContentsOfURL:infoUrl];
        NSError *error;
        responseDict = [NSJSONSerialization JSONObjectWithData:infoData options:0 error:&error];
        NSLog(@"%@", responseDict);

あなたはおそらく、私が知っている必要のないコードを持っていることに気づいたでしょうが、何か他のものに対して間違った応答を得ています。コードの一部をクリーンアップして、urlToAuthPage を使用したリクエストからの応答を取得するにはどうすればよいですか?

4

2 に答える 2

1

私はあなたが言っていることを理解していると思います.NSDataメソッドとURLを使用してリクエストを呼び出す方法を知っていますが、これはリクエストボディを提供したいPOSTをサポートしていません.

もう1つの問題は、これを機能させたとしても、同期になることです。NSURLConnection クラスには素晴らしい解決策があります。コードの前半で行うようにリクエストを作成します (本文に投稿データを使用)。次に、これを行います:

[NSURLConnection sendAsynchronousRequest:request
    queue:[NSOperationQueue mainQueue]
    completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    // your data or an error will be ready here
}];
于 2012-06-17T05:44:27.653 に答える
0

上記の@danhで強調されているように、NSURLConnectionを使用して同期リクエストと非同期リクエストのどちらかを選択できます。ブロックの代わりに委任を使用して非同期を実現できる場合は、それがより親しみやすいと思われる場合は、言及したいと思います。

基本的に、NSURLConnectionDelegateおよびNSURLConnectionDataDelegateのメソッドを実装してから、接続のデリゲートとして自分自身を割り当て、これらのプロトコルで定義されたコールバック中に適切に応答することができます。

[NSURLConnection connectionWithRequest:yourNSMutableURLRequest delegate:self];

これを頻繁に行う場合は、私が行ったように、すべての非同期のものを接続マネージャーに抽象化できます。接続マネージャーは、同期および非同期の要求を処理できます(非同期の場合、関係者へのポインターを格納し、コールバックを実行します)リクエストが終了したとき)。これは、両方の種類のリクエストに使用するシンプルなインターフェイスであり、さらに抽象化することでうまく機能します(WebRequestクラスを作成してPOSTリクエストを本文でカプセル化するなど)。

于 2012-06-17T06:01:53.410 に答える