Мне нужно выполнить привязку SSL, поэтому вам необходимо проверить сертификат SSL на стороне сервера. Так что я должен использовать делегатов NSURL. У меня есть вспомогательный класс, в котором я создал метод, который возвращает меня Войти ответ:NSUrlConnection Методы делегата не вызываются из класса-помощника
- (NSData *)sendSynchronousRequest:(NSString *)strNewLoginRequest
returningResponse:(NSURLResponse **)response
error:(NSError **)error {
NSMutableURLRequest *finalRequest = nil;
NSURL *url= [NSURL URLWithString:const_url];
finalRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0];
NSData *requestData = [NSData dataWithBytes:[strLoginRequest UTF8String] length:[strLoginRequest length]];
self.connection = [[NSURLConnection alloc] initWithRequest:finalRequest delegate:self startImmediately:NO];
NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
[self.connection unscheduleFromRunLoop:currentRunLoop forMode:NSDefaultRunLoopMode];
[self.connection scheduleInRunLoop:currentRunLoop forMode:@"connectionRunLoopMode"];
[self.connection start];
while ([currentRunLoop runMode:@"connectionRunLoopMode" beforeDate:[NSDate distantFuture]]);
return self.mutableResponse;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.response = response;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
self.mutableResponse = [[NSMutableData alloc]init];
[self.mutableResponse appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
dispatch_async(dispatch_get_main_queue(), ^{
if (loadingView)
{
[loadingView removeView];
}
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Failure" message:@"Network Failure" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
});
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if (loadingView)
{
[loadingView removeView];
}
self.resultString = [[NSString alloc] initWithData:self.mutableResponse encoding:NSASCIIStringEncoding];
}
и я называю этот метод из другого класса под названием ViewController с кодом
-(void)doLogin
{
self.service = [[SyncCommunicationService alloc]init];
NSData *data = [self.service sendSynchronousRequest:strNewLoginRequest
returningResponse:&response
error:nil];
}
Я попытался вызвать этот метод в фоновом режиме и в основном потоке, но все же делегировать методы не получаются, я пробовал много других ответов с одного и того же сайта, но все равно не смог решить эту проблему, поэтому, пожалуйста, кто-нибудь может понять, что я делаю неправильно.
Мне нужно проверить сертификаты сервера для привязки SSL, поэтому мне нужно использовать метод делегата. – Vaibhav
В этом случае попробуйте установить очередь делегирования соединения 'setDelegateQueue:' Пусть эта очередь будет свойством вашего SyncCommunicationService –
И уверены ли вы в этом '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Почему вы не используете dispatch_semaphore? Чем ваш метод sendSynchronousRequest: returnResponse: error: 'ничего не вернет, и данные ответа могут быть получены из свойства SyncCommunicationService (это то, что я делаю каждый раз, мне нужно получить данные асинхронно) –