通常,我喜欢使用完成处理程序块使用 NSURL 的 sendAsynchronousRequest 类方法“触发并忘记”,但是当需要身份验证时,这似乎不是一个选项。
当使用像这样的完成处理程序样式请求时:
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mysite.com/"]]
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
//Do Stuff
}];
处理身份验证的正确方法是什么?我是否需要分配和初始化 NSURLConnection 并设置委托而不是使用此类方法样式?我想我了解如何使用委托函数正确进行身份验证,但我试图弄清楚是否可以将其包含在 completionHandler 块中,或者是否有更好的方法来做到这一点。
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] > 0) {
NSLog(@"Authentication Failure");
[connection cancel];
}
else
{
NSURLCredential *credential = [NSURLCredential credentialWithUser:self.username
password:self.password
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
}