1

更新:どうやら iOS 5 では、問題は「チャンク エンコーディング」です。それなしで送信すると、すべてが機能します。サーバー上では、iOS 5 で何らかの理由で転送が終了しないようです (iOS 6 ではすべてが機能します)。誰でもそれを回避する方法がありますか?


iOS 6 と同じバージョンのシミュレーターで完全に動作する NSURLConnection を使用していますが、以前のデバイスでそれをテストすると、応答が得られます

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

そして決して

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

私の関連データが含まれていると思われます。

ここに、私が使用したすべての関数を含むコードのスニペットがあります (デリゲート関数を削除すると同様の問題が解決する人もいましたが、私の場合はそれらがありません)。

-(void)establishConnection{

NSURL *url;

url = .... // Here I've set my url - it's https


self.responseData = [[NSMutableData alloc] initWithLength:0] ;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:SERVER_RESPONSE_TIMEOUT]; 

[request setHTTPMethod:@"POST"];

// More settings here //
....


//Accept-Language: ENUS
[request addValue:@"ENUS" forHTTPHeaderField:@"Accept-Language"];

// "Accept-Topic: Dictation"
[request addValue:@"Dictation" forHTTPHeaderField:@"Accept-Topic"];

// "Accept: text/plain"
[request addValue:@"text/plain" forHTTPHeaderField:@"Accept"];

//"Transfer-Encoding: chunked"
[request addValue:@"chunked" forHTTPHeaderField:@"Transfer-Encoding"];

NSMutableData *postBody = [NSMutableData data];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [NSString stringWithFormat:@"%@",[paths objectAtIndex:0]]; // Get sound directory
NSData *soundData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@",documentsDirectory, @"rec.wav"]]; 

[postBody appendData:soundData];
[postBody appendData:[@"\r\n" dataUsingEncoding: NSUTF8StringEncoding]];

// final boundary
//[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

// add body to post
[request setHTTPBody:postBody];

self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
// You may have received an HTTP 200 here, or not...
NSLog(@"didReceiveResponse");

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

NSString* aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

NSLog(@"This is my first chunk %@", aStr);

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connectionV {
connectionV = nil;
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Something went wrong...");

}

私が間違っていることを見つけることができないのを助けてください。

4

1 に答える 1