ОБНОВЛЕНИЕ: По-видимому, на iOS 5 проблема заключается в «Chunked-Encoding», при отправке без этого все работает. Кажется на сервере, что по какой-то причине на iOS 5 передача никогда не заканчивается (на iOS 6 все работает). У кого-то есть способ обойти это?Использование NSURLConnection с iOS 5 не работает должным образом
Я использую NSURLConnection, который отлично работает на IOS 6 и на симуляторе на той же версии, но при тестировании, что на более ранних устройствах я получить ответ только с
- (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...");
}
Пожалуйста, помогите, я не могу найти, что я делаю неправильно.
Получаете ли вы 200 в didReceiveResponse? –
Нет, я получаю 400. Есть ли разница с iOS 5 из-за https? Он отлично работает на iOS 6 ... Я отправляю точно такие же параметры для обоих. – Idan
Кажется, проблема связана с «Chunked-Encoding» на iOS 5. Пожалуйста, проверьте мое обновление. – Idan