업데이트 : 분명히 iOS 5에서 문제는 "Chunked-Encoding"입니다. 서버에서 iOS 5에서 어떤 이유로 든 전송이 끝나지 않는 것 같습니다 (iOS 6에서는 모든 것이 작동 함). 누구든지 그 주위에 방법이 있습니까? 아이폰 OS 6과 동일한 버전의 시뮬레이터에서 완벽하게 작동하지만 이전 장치에 그것을 테스트 할 때 난 단지iOS 5에서 NSURLConnection을 사용하면 제대로 작동하지 않습니다.
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
와 결코와 응답을 내가있는 NSURLConnection을 사용하고
- (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...");
}
내가 뭘 잘못하고 있는지 찾을 수 없도록 도와주세요.
didReceiveResponse에 200 점이 있습니까? –
아니요, 400이됩니다. https 때문에 iOS 5와 어떤 차이가 있습니까? 그것은 iOS 6에서 완벽하게 작동합니다 ... 두 가지 모두 정확히 동일한 매개 변수를 보내고 있습니다. – Idan
iOS 5에서 "Chunked-Encoding"문제가있는 것 같습니다. 내 업데이트를 체크 아웃하십시오. – Idan