Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLConnection使异步调用同步并处理自签名证书_Ios_Nsurlconnection_Nsrunloop - Fatal编程技术网

Ios NSURLConnection使异步调用同步并处理自签名证书

Ios NSURLConnection使异步调用同步并处理自签名证书,ios,nsurlconnection,nsrunloop,Ios,Nsurlconnection,Nsrunloop,我正在尝试进行一个异步调用,一个同步调用。我知道这不是一个更好的主意。但是,我确实需要这样的代码来处理自签名证书的身份验证挑战,同时使调用保持同步 但是,我不确定这是否是使Asycnh呼叫成为同步呼叫的完美方式 -(NSData*) startConnection{ NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

我正在尝试进行一个异步调用,一个同步调用。我知道这不是一个更好的主意。但是,我确实需要这样的代码来处理自签名证书的身份验证挑战,同时使调用保持同步

但是,我不确定这是否是使Asycnh呼叫成为同步呼叫的完美方式

-(NSData*) startConnection{
     NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

   while(!isFinished && [[NSRunLoop currentLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]){
   }


   return responseAppData;
}


     - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
      //Code to handle Certificate
}


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
       [responseAppData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
         isFinished=YES;
}
我还想过使用while循环,如下所示,那么应该使用哪一个呢

   while(!isFinished ){
   }

事实恰恰相反。如果要处理这些NSURLConnectionLegate方法,则需要使用异步调用,而不是同步调用。否则,将永远不会调用委托。

更好的方法是使用块编码。我确实有处理块的方法,但我需要一个同步方法来处理自签名证书。我认为您可以在didReceiveAuthenticationChallenge方法中处理此问题?我的代码是异步的,响应委托,并且由于while条件,它作为同步代码工作。
 typedef void (^onDownload)(NSData *data);

@property (nonatomic,assign) onDownload block;


-(void) startConnectionwithBlock:(onDownload) pBlock;{
    self.block = [pBlock copy];
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
    block(self.data);
}