2012-05-23 2 views
4

Я использую приведенный ниже код для аутентификации пользователя с удаленным сервером. Если я даю правильное имя пользователя и пароль, нет проблемы, потому что происходит проверка подлинности, и я получаю ответ от сервер.iOS5: willSendRequestForAuthenticationChallenge метод работает рекурсивно

Но когда я даю неправильные учетные данные, этот метод вызывается рекурсивным образом, поэтому я не могу это сломать.

Пожалуйста, помогите мне, как это сломать, чтобы я мог показывать сообщение об ошибке с ошибкой аутентификации.

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

    NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username" 
                  password:@"password" 
                  persistence:NSURLCredentialPersistenceForSession]; 
    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];  
} 

ответ

4

Попробуйте это.

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

     if ([challenge previousFailureCount] > 0) { 
             // do something may be alert message 
         } 
     else 
     { 

      NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username" 
                    password:@"password" 
                    persistence:NSURLCredentialPersistenceForSession]; 
      [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; 
     } 

} 
+0

Введите два раза на утверждение «else» ... как это возможно? –

5

Вы должны проверить количество ошибок и отменить вызов аутентификации надлежащим образом:

if ([challenge previousFailureCount]) { 
    [[challenge sender] cancelAuthenticationChallenge:challenge]; 
} else { 
    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; 
} 
Смежные вопросы