NSURLConnection всегда ИСТИНА - PullRequest
0 голосов
/ 26 мая 2019

Я проверяю соединение с сервером с помощью приведенного ниже кода, однако «соединение» всегда TRUE ..

Я знаю, что initWithRequest: делегат: устарел, и вместо этого рекомендуется использовать NSURLSession, однако я бы предпочел продолжать использовать его для простоты, так как NSURLSession кажется гораздо более сложным для реализации.

Какой-нибудь совет, чтобы заставить это работать?

NSURL *url = nil;
NSMutableURLRequest *request = nil;

NSString *getURL = [NSString stringWithFormat:@"%@?TEST=%@",URL, str];

url = [NSURL URLWithString: getURL];
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request addValue: @"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if(connection) //Always true!!!
{
    mutableData = [NSMutableData new];
    NSLog(@"SERVER CONNECTION OK");
}
else
{
    NSLog(@"NO SERVER CONNECTION");
}

1 Ответ

1 голос
/ 27 мая 2019

соединение - это созданный вами объект NSURLConnection.Если он создан, он вернет true.

Проблема в том, что вы не обработали данные ответов, которые можно использовать с помощью следующих функций делегатов:

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-(void)connectionDidFinishLoading:(NSURLConnection *)connection;

Вы должны поместить журнал в didFailWithError, чтобы проверить, успешно ли установлено ваше соединение.

Я совершенно уверен, что вы не пробовали NSURLSession, но вы должны это делать, потому что NSURLSession может быть записан как блоки, что облегчает написание кода (без делегатов). На самом деле NSURLSession намного проще и проще в реализации, чем NSURLConnection.

...