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