ARC и UIAlertView: непризнанный селектор, отправленный в экземпляр

Вот как я показываю UIAlertView, и делегат щелкнулButtonAtIndex -

UIAlertView *alert =
    [[UIAlertView alloc] initWithTitle: @"title"
                               message: @"message"
                              delegate: self
                     cancelButtonTitle: @"Cancel"
                     otherButtonTitles: @"Continue", nil];

    [alert show];


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    //something
}

Этот фрагмент кода отлично работает без ARC. Но с ARC это порождает эту ошибку - Завершение приложения из-за неперехваченного исключения "NSInvalidArgumentException", причина: '- [__ NSCFType alertView: clickedButtonAtIndex:]: нераспознанный селектор, отправленный в экземпляр 0x859d790'

Любые идеи о том, почему делегат бросает эту ошибку?

Ответ 1

Ваш делегат был dealloc'd. Дважды проверьте свой код, чтобы убедиться, что объект, отображающий предупреждение, и установив его как делегата, каким-то образом сохраняется (т.е. Что-то в вашем приложении имеет сильную ссылку на него).

Ответ 2

Аналогично может случиться, если вы забыли нуль в конце после последнего параметра otherButtonTitles:

delegate: self cancelButtonTitle: @"No" otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)

Интересно, что он падает только при первом запуске приложения. После этого он работает отлично.