Я вижу некоторые проблемы с вашим кодом:
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[NSURLConnection connectionWithRequest:request delegate:self];
NSData *returnData = (NSMutableData*)[NSURLConnection sendSynchronousRequest:request
returningResponse:&WSresponse error:&WSerror];
connectionWithRequest: делегат:
Создает и возвращает инициализированное URL-соединение и начинает загружать данные для URL-запроса.
initWithRequest: делегат:
Возвращает инициализированное соединение URL и начинает загружать данные для запроса URL.
sendSynchronousRequest: returningResponse: ошибка:
Выполняет синхронную загрузку указанного URL-запроса.
См .: Ссылка класса NSURLConnection
Почему вы делаете все три в одном методе? Два асинхронных URL-соединения и одно синхронное соединение.
sendSynchronousRequest настоятельно не рекомендуется использовать в основном потоке.
Вам нужен только один объект соединения URL для отправки асинхронной загрузки запроса URL. Прокомментируйте отдых после:
if (conn) {
myMutableData = [NSMutableData data];
NSLog(@"Conn is true");
}
Изменить myMutableData = [NSMutableData data]; to myMutableData = [[NSMutableData alloc] init];
и реализовать NSURLConnectionDelegate
методы для получения асинхронных обратных вызовов:
-(NSCachedURLResponse *)connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
return nil;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
NSInteger statusCode = [httpResponse statusCode];
NSLog(@"Http Status Code: %i",statusCode);
if ([response respondsToSelector:@selector(statusCode)])
{
int statusCode = [((NSHTTPURLResponse *)response) statusCode];
if (statusCode >= 400)
{
[connection cancel]; // stop connecting; no more delegate messages
NSDictionary *errorInfo
= [NSDictionary dictionaryWithObject:[NSString stringWithFormat:
NSLocalizedString(@"Server returned status code %d",@""),
statusCode]
forKey:NSLocalizedDescriptionKey];
NSError *statusError
= [NSError errorWithDomain:@"HTTP Error"
code:statusCode
userInfo:errorInfo];
[self connection:connection didFailWithError:statusError];
}
}
[myMutableData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[myMutableData appendData:data];
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
connection = nil;
[myMutableData release],myMutableData = nil;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *result =[[NSString alloc]initWithData:myMutableData encoding:NSUTF8StringEncoding];
NSLog(@"downloaded output %@",result);
[result release];
[myMutableData release],myMutableData = nil;
}