Установите делегат: self.delegate в alertView, где self.delegate реализует протокол UIAlertViewDelegate.

В моем ViewController я реализовал UIAlertViewDelegate, и в моей модели у меня есть метод, который создает UIAlertView с делегатом, установленным на self.delegate, который является экземпляром ViewController. Затем я пытаюсь вызвать willPresentAlertView следующим образом (в модели):

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid operation"
            message:@"Cannot divide by 0!"
            delegate:self.delegate
            cancelButtonTitle:@"Cancel"
            otherButtonTitles:@"Undo division",nil];
[self.delegate willPresentAlertView:alert];

WillPresentAlertView реализован в ViewController следующим образом:

- (void)willPresentAlertView:(UIAlertView *)alertView
{
    [alertView show];
}

Затем я получаю сообщение об ошибке Thread 1:EXC_BAD_ACCESS (код=2,адрес=0xbf7fff6c) при вызове [alert show].

Если я устанавливаю делегата на nil или self, он работает нормально, но я хочу вызывать alertView:alertView clickedButtonAtIndex:buttonIndex, когда я нажимаю кнопку в предупреждении, что не работает с делегатом, установленным на nil или self. Только ViewController реализует эти методы, почему он должен быть self.delegate или?

Я хочу, чтобы модель вызывала оповещение, но я хочу, чтобы ViewController обрабатывал такие методы оповещения, как alertView:alertView clickedButtonAtIndex:buttonIndex.

Как это может быть сделано?


person user2908112    schedule 23.06.2014    source источник


Ответы (1)


это должно быть само собой [self willPresentAlertView:alert]

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid operation"
            message:@"Cannot divide by 0!"
            delegate:self //self
            cancelButtonTitle:@"Cancel"
            otherButtonTitles:@"Undo division",nil];
[self willPresentAlertView:alert];//self again
person meda    schedule 23.06.2014