1

我尝试使用 webview 访问受保护的 web 文件夹。使用“硬编码”用户并通过它可以工作,但我的计划是弹出一个警报视图以输入用户并通过。这是代码的一部分:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:    (NSURLAuthenticationChallenge *)challenge{

NSLog(@"Need Authentication");

UIAlertView *webLogin = [[UIAlertView alloc] initWithTitle:@"Authentication" 
                                                   message:@"Enter User and Pass" 
                                                   delegate:self 
                                                   cancelButtonTitle:@"Cancel" 
                                                   otherButtonTitles:@"OK"
                                                   , nil];


webLogin.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
[webLogin show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

user = [[alertView textFieldAtIndex:0]text];
pass = [[alertView textFieldAtIndex:1]text];
NSLog(@"user is %@ and pass is %@",user,pass);

if (buttonIndex == [alertView cancelButtonIndex]) {

    [self dismissModalViewControllerAnimated:YES];
}
else if (buttonIndex != [alertView cancelButtonIndex]) {

    NSLog(@"OK Pressed");
    [self handleAuthentificationOKForChallenge:nil withUser:user password:pass];
}


}

- (void)handleAuthentificationOKForChallenge:(NSURLAuthenticationChallenge *)aChallenge     withUser:(NSString *)userName password:(NSString *)password {

NSURLCredential *credential = [[NSURLCredential alloc]
                               initWithUser:userName password:password
                               persistence:NSURLCredentialPersistenceForSession];
[[aChallenge sender] useCredential:credential forAuthenticationChallenge:aChallenge];

}

谁能告诉我如何调用 handleAuthenticationOKForChallenge 我对 NSURLAuthenticationChallenge 有点困惑......

4

1 回答 1

1

首先,if如果它们比较相同的变量,则不应一个接一个地使用两个语句。你的第二个if陈述应该是一个else if陈述。

看起来您的handleAuthentificationOKForChallenge方法想要接受 的实例NSURLAuthenticationChallenge,但您目前只是在传递它nil

为什么不在你的NSURLAuthenticationChallenge头文件中声明一个实例(我们称之为 myChallenge),并在你的第一个方法中,使用challenge. 您也可以将其设置为等于挑战(如果您想先尝试一下,可能会起作用),但您可能会在某些时候丢失指针。然后,您将在第二种方法中将您的行更改为:

[self handleAuthentificationOKForChallenge:myChallenge withUser:user password:pass];

让我知道这个是否奏效...

于 2012-06-29T01:21:56.177 回答