Установите делегат: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];
}

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

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

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

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

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
Другие вопросы по тегам