3

私はここにこのコードを持っています:

NSString *post = [NSString stringWithFormat:@"deviceIdentifier=%@&deviceToken=%@",deviceIdentifier,deviceToken]; 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://website.com/RegisterScript.php"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"MyApp-V1.0" forHTTPHeaderField:@"User-Agent"];
[request setHTTPBody:postData]; 
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *response = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding]; 

これは、デバイスをデータベースに登録するためにPHPサーバーにデータを送信する必要がありますが、一部のユーザーにはPOSTデータが送信されていません。私はこの行を言われました:

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];

問題を引き起こしている可能性があります。このスクリプトがPOSTデータを送信しないことがある理由について何か考えはありますか?サーバーで、送信に失敗したパケットトレースを取得し、Content-lenghtが0として表示されたため、データはまったく送信されませんでした。

4

3 に答える 3

2

私は私の中で同様の機能を行っていますが、異なるのはあなたが間違っていると思う行だけです。やってみてください

NSMutableData *postData = [NSMutableData data];
[postData appendData:[[NSString stringWithFormat::@"deviceIdentifier=%@&deviceToken=%@",deviceIdentifier,deviceToken]dataUsingEncoding:NSUTF8StringEncoding]];

stringByUrlEncodingは基本的に、予約された文字を文字エンコードされた安全な文字列に置き換えます(これを説明するのに最適な方法だと思います。私の心は空白のATMです)。

お役に立てば幸い

于 2010-03-08T00:34:56.333 に答える
0

Test your data: NSLog([[NSString alloc] initWithData: postData encoding:NSAsciiStringEncoding]);

于 2010-03-08T16:07:18.537 に答える
0

By the way you can get app version from the properties:

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; [request setValue:[NSString stringWithFormat:@"My App %@", appVersion] forHTTPHeaderField:@"User-Agent"];
于 2010-12-02T11:53:43.987 に答える