cancelAuthenticationChallenge завершается с NSRangeException после того, как пользователь нажимает Нет

Я пытаюсь отменить NSURLAuthenticationChanllenge, если сертификат сервера не может быть проверен (в моем случае самоподписанный), выскакивая UIAlertView с двумя кнопками - "Нет" и "Да"

когда пользователь нажимает Да, я продолжаю, но когда пользователь нажимает Нет, я отменяю его. Вот как я это делаю. Я использую делегат для UIAlertView, чтобы захватить индекс кнопки, которая была нажата пользователем. Когда я нажимаю Да, это работает нормально, но когда вы нажимаете Нет, я получаю NSRangeException

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

if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
    BOOL trusted;
    //Evaluate the cert here -- removed code to be brief

    if(trusted){
        NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        [challenge.sender useCredential:credential forAuthenticationChallenge:challenge];
    }else{
        //define a block
        self.certProceedBlock = ^(NSInteger clickedButton) {
            if(clickedButton == 1){
                NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
                [challenge.sender useCredential:credential forAuthenticationChallenge:challenge];
            }else if(clickedButton == 0){
                [challenge.sender cancelAuthenticationChallenge:challenge]; //this fails with NSRangeException
            }
        };


        //pop up the Notification
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unknown Certificate"
                                                        message:[NSString stringWithFormat:message, certificateSubjectName]
                                                       delegate:self
                                              cancelButtonTitle:@"No"
                                              otherButtonTitles:@"Yes", nil];
        [alert show];


    }
}

}

Вот этот делегат

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if(self.certProceedBlock){
    self.certProceedBlock(buttonIndex);
}

}

Ошибка: * Завершение приложения из-за необработанного исключения "NSRangeException", причина: '* - [__ NSArrayI objectAtIndex:]: индекс 1 за пределами [0 .. 0]'

Как и просил - вот полная версия stackTrace

Я попытался добавить изображение трассировки стека - но изображение слишком маленькое. вот текст. пожалуйста, скопируйте в textEdit- это должно быть лучше

[ NSArrayI objectAtIndex:]: индекс 1 за пределами [0 .. 0]' *** Стек первого вызова вызова: ( 0 CoreFoundation 0x004e5946 __exceptionPreprocess + 182 1 libobjc.A.dylib 0x02bd2a97 objc_exception_throw + 44 2 CoreFoundation 0x003cb_db_index_b_0_in_b2 ] + 210 3 MYCODE** 0x0017d9e1 -[HttpUtils getAuthTokenExpiration:] + 145 4 MYCODE** 0x0017dfb3 -[HttpUtils saveAuthTokenExpirationDate:] + 99 5 MYCODE** 0x0017ed5a __68-[HttpUtils getToken: Титулы: Имя пользователя: пароль:tokenCompletionBlock:]_block_invoke + 218 6 MYCODE** 0x001850ce -[соединение HttpUtils:didFailWithError:] + 334 7 CFNetwork 0x0497d38e __67-[NSURLConnectionInternalConnection cancelAuthenticationChallenge:]_block_invoke + 51 8BNNNECT_NOGNDG_ND_G_ND_G_ND_G_ND_NG_ND_N_G_ND_N_G_ND_NG_ND_ND_NG_ND_C_ND NSURLConnectionInternalConnection invokeForDelegate:] + 145 10 CFNetwork 0x04995813 - [NSURLConnectionInternal _withConnectionAndDelegate: onlyActive:] + 189 11 CFNetwork 0x04995a10 - [NSURLConnectionInternal _withConnectionAndDelegate:] + 58 12 CFNetwork 0x0497d314 - [NSURLConnectionInternalConnection cancelAuthenticationChallenge:] + 384 13 CFNetwork 0x048c100d - [NSURLConnection (NSURLAuthenticationChallengeSender) cancelAuthenticationChallenge:] + 50 14 MYCODE ** 0x00184b82 __58- [HttpUtils соединение:didReceiveAuthenticationChallenge:]_block_invoke + 370 15 MYCODE** 0x00184f52 -[HttpUtils alertView:clickedButtonAtIndex:] + 178 16 UIKit 0x0186960d -[UIAlertView _prepareToDismissForTappedIndex:] + 192 17 UIKit 0x01868fa9 __35-[UIAlertView _prepareAlertActions]_block_invoke50 + 56 18 UIKit 0x018618b5 -[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:] + 72 19 UIKit 0x01861868 -[UIAlertController _dismissAnimated:triggeringAction:] + 56 20 UIKit 0x01861454 -[UIAlertController _actionViewTapped:] + 68 21 libobjc.A.dylib 0x02be8771 -[NSObjectObjectObjectObjectObject_SeBoS_S_S_F_P_S_S_S_S_F_C_P_S_S_S_S_P_S_S_P_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S_S] _UIAlertControllerActionView _triggerSelect] + 60 23 UIKit 0x01a44607 - [_ UIAlertControllerActionView touchesEnded: withEvent:] + 187 24 UIKit 0x019e47b7 _UIGestureRecognizerUpdate + 13225 25 UIKit 0x015fb26b - [UIWindow _sendGesturesForEvent:] + тысяча триста пятьдесят шесть 26 UIKit 0x015fc0cf -[UIWindow SendEvent:] + 769 27 UIKit 0x015c1549 -[UIApplication SendEvent:] + 242 28 UIKit 0x015d137e _UIApplicationHandleEventFromQueueEvent + 20690 29 UIKit 0x015a5b19 _UIApplicationHandleEventQueue + 2206 30 CoreFoundation 0x004091df __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 15 31 CoreFoundation 0x003feced __CFRunLoopDoSources0 + 253 32 CoreFoundation 0x003fe248 __CFRunLoopRun + 952 33 CoreFoundation 0x003fdbcb CFRunLoopRunSpecific + 443 34 CoreFoundation 0x003fd9fb CFRunLoopRunInMode + 123 35 GraphicsServices 0x0697324f GSEventRunModal + 192 36 GraphicsServices 0x0697308c GSEventRun + 104 37 UIKit 0x015a98b6 UIApplicationMain + 1526 38 MYCODE ** 0x001f857d main + 141 39 libdyld.dylib 0x03349dyb ++: начало + 1): + 1) при необъяснимом исключении типа NSException

** удалил имя моего приложения и заменил на строку MYCODE

0 ответов

Другие вопросы по тегам