我使用NSURLConnection的sendSynchronousRequest与服务器通信。我想处理使用连接委托可以实现的身份验证,但不会为同步请求调用委托。
NSData *data = [NSURLConnection sendSynchronousRequest:UrlRequest returningResponse:&response error:&error];
dispatch_async(dispatch_get_main_queue(), ^{
if(!error)
{
// Do something
}
else
{
// Handle error
}
});
但是我想过使用
异步发送所有请求[NSURLConnection connectionWithRequest:menuRequest delegate:self];
但是我在同一个类中有多个连接,并且每个连接的成功和错误都用于执行不同的任务。如果我使用异步请求错误并且代理人听到成功,那对于所有请求都是相同的class,我无法找出哪个请求失败以及哪个请求成功。我有两个问题
答案 0 :(得分:1)
您可以通过不同方式实现这一目标。
您可以将信用卡放入网址,例如https://username:password@domain.tld/api/user.json
您可以在同步连接呼叫之前添加将您的信用添加到NSURLCredentialStorage
。
您可以使用以下代码来实现。
- (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse *__strong*)response error:(NSError *__strong*)error
{
_finishedLoading=NO;
_receivedData=[NSMutableData new];
_error=error;
_response=response;
NSURLConnection*con=[NSURLConnection initWithRequest:request
delegate:self
startImmediately:NO];
[con start];
return _receivedData;
}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
//handle the challenge
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
*_response=response;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_receivedData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
*_error=error;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
}