2014-01-10 71 views
0

我想做一個異步調用,一個同步的。我知道這樣做不是一個好主意。但是,我確實需要這樣的代碼來處理自簽名證書的身份驗證挑戰,同時保持呼叫仍然同步。NSURLConnection使得異步調用Synch並處理自簽名證書

但是,我不確定這是否是讓Asycnh稱爲Synch的最佳方法。

-(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){ 
    } 
+0

更好的方法是使用塊編碼 –

回答

1

實際上恰恰相反。如果要處理這些NSURLConnectionDelegate方法,則需要使用異步調用,而不是同步。否則,代表從不會被調用。

+0

我的代碼工作異步,響應委託,因爲while條件它作爲同步代碼。 – andyPaul

0
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); 
} 
+0

我確實有方法使用塊,但我需要一個同步方法來處理自簽名證書 – andyPaul

+0

我認爲你可以在didReceiveAuthenticationChallenge方法管理這個? –