В моем 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
.
Как это может быть сделано?