У меня есть NSURLConnection, которое работает некоторое время и внезапно не работает.NSURLConnection не возвращает данные
По какой-то причине, единственный метод делегата, который вызывается является:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:
Ни один из других методов делегата не дозвонились. У меня есть другие классы, которые используют почти тот же код, просто другой запрос и URL-адрес, и все они работают нормально. Я прочитал много сообщений, которые говорят о том, что соединение находится в той же теме, что и делегат, но ничего не работает для меня. Я знаю, что сервер возвращает ответ, потому что, если я передаю одну и ту же информацию через простую форму html, я получаю ответ в своем браузере, и я вижу доказательства того, что работает мой скрипт на стороне сервера, потому что я вижу изменения, которые он делает в данные SQL. И приложение получает какой-то ответ, его просто не получают никаких данных или вызывают метод делегирования connectionDidFinishLoading.
Любые идеи о том, что может быть проблемой?
Вот упрощенная версия на мой код:
#import "RegistrationViewController.h"
@interface RegistrationViewController()
@end
NSMutableData *responseData;
NSURLConnection *theconnection;
@implementation RegistrationViewController
/*
* Attempt to Register online. Returns False if valiation failed
*/
- (BOOL) registerOnline{
// OTHER CODE HERE TO BUILD DATA FOR THE REQUEST
// URL Request
NSURL *requestUrl = [NSURL URLWithString:THEURL];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:requestUrl];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];
// Initialse Response Object
responseData = [[NSMutableData alloc] init];
// Conection
theconnection = [NSURLConnection connectionWithRequest:request delegate:self];
[theconnection start];
return YES;
}
/*
* Handle the event of registration failing
*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"didFailWithError");
// OTHER CODE HERE TO HANDLE THE ERROR....
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"did receive response ");
}
/*
* Handle the reciept of Data
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"didReceiveData");
// Add data to the response
[responseData appendData:data];\
}
/*
* Data finnished loading
*/
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"connectionDidFinishLoading");
// OTHER CODE HERE TO HANDLE THE RESPONSE....
}
Кстати, вы пропадаете значения, полученные в 'bodyData', с помощью' CFURLCreateStringByAddingPercentEscapes'? Кроме того, если 'bodyData' строка,' [request setHTTPBody: [bodyData dataUsingEncoding: NSUTF8StringEncoding]] '. – Rob
Да, я делаю это, Просто не показывай это выше, потому что я не думал, что это необходимо. Я уверен, что сервер успешно получает мои данные запроса. – user1775671