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