1

NSMutableURLRequestは文字列をPHPに2回送信しています。私は何を間違っていますか?

- (void)viewDidLoad {

// Printando os Dados

/////

NSString *endereco = [[NSString alloc] initWithFormat:@"%@ - CEP: %@", self.sharedData.dataEndereco, self.sharedData.dataCEP];


NSMutableURLRequest *request = 
[[NSMutableURLRequest alloc] initWithURL:
 [NSURL URLWithString:@"http://localhost/dev/mcomm/pedido.php"]];
NSLog(@"ENVI");

[request setHTTPMethod:@"POST"];
NSString *postString = [[NSString alloc] initWithFormat:@"nome=%@&email=%@&endereco=%@&produto=%@&marca=%@&preco=%@&codigo=%@&variacao=%@&parcelas=%@&valorParcelas=%@&cartao=%@&numCartao=%@&codCartao=%@&vencCartao=%@&nomeCartao=%@", self.sharedData.dataNome, self.sharedData.dataEmail, endereco, self.sharedData.dataProd, self.sharedData.dataMarca, self.sharedData.dataPreco, self.sharedData.dataCodigo, self.sharedData.dataVariacao, self.sharedData.numParcelas, self.sharedData.valorParcelas, self.sharedData.cartao, self.sharedData.numeroCartao, self.sharedData.codigoCartao, self.sharedData.dataVencimento, self.sharedData.nomeImpressoCartao];

[request setValue:[NSString 
                   stringWithFormat:@"%d", [postString length]] 
 forHTTPHeaderField:@"Content-length"];

[request setHTTPBody:[postString 
                      dataUsingEncoding:NSUTF8StringEncoding]];

[[NSURLConnection alloc] 
 initWithRequest:request delegate:self];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[loaderAtividade startAnimating];


//get response
NSHTTPURLResponse* urlResponse = nil;  
NSError *error = [[NSError alloc] init];  
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];  
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
4

3 に答える 3

3

最初のリクエストは、次によって開始されます。

[[NSURLConnection alloc] initWithRequest:request delegate:self];

2 つ目は関数によって送信されます。

 [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

sendSynchronous に関する Apple のドキュメントからの注意事項:

重要: この呼び出しが失敗するまでに数分かかる可能性があるため (特に iOS でセルラー ネットワークを使用している場合)、GUI アプリケーションのメイン スレッドからこの関数を呼び出さないでください。

NSURLConnection デリゲート プロトコルを実装し、同期要求を送信しないようにする必要があります。

于 2011-10-08T23:07:43.597 に答える
0
NSURLConnection *conn = .....
if(conn){
    ......

    [conn cancel];//! important!
    [conn release];
}

接続を停止する

于 2012-08-18T09:28:14.670 に答える
0

ダニエルの答えに加えて、initWithRequest:delegate:startImmediately: を NO で実装することにより、最初のリクエストが発火するのを防ぐことができます

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];

その後、非同期リクエストを開始したい場合は、接続オブジェクトで -start を呼び出すだけです

[urlConnection start];
于 2011-10-08T23:38:10.577 に答える