1

Webビューを使用して保護された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、同じ変数を比較している場合は、2つのステートメントを次々に使用しないでください。2番目ifのステートメントはステートメントである必要がありelse ifます。

handleAuthentificationOKForChallengeメソッドがのインスタンスを受け入れたいようNSURLAuthenticationChallengeですが、現在はそれを渡していnilます。

ヘッダーファイルでインスタンスを宣言してNSURLAuthenticationChallenge(myChallengeと呼びましょう)、最初のメソッドで、を割り当てて初期化しchallengeます。チャレンジと同じように設定することもできますが(これを最初に試したい場合は、うまくいく可能性があります)、ある時点でポインターを失う可能性があります。次に、2番目のメソッドの行を次のように変更します。

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

これが機能するかどうか教えてください...

于 2012-06-29T01:21:56.177 に答える