Ответ 1
Ваш делегат был dealloc'd. Дважды проверьте свой код, чтобы убедиться, что объект, отображающий предупреждение, и установив его как делегата, каким-то образом сохраняется (т.е. Что-то в вашем приложении имеет сильную ссылку на него).
Вот как я показываю 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'
Любые идеи о том, почему делегат бросает эту ошибку?
Ваш делегат был dealloc'd. Дважды проверьте свой код, чтобы убедиться, что объект, отображающий предупреждение, и установив его как делегата, каким-то образом сохраняется (т.е. Что-то в вашем приложении имеет сильную ссылку на него).
Аналогично может случиться, если вы забыли нуль в конце после последнего параметра otherButtonTitles
:
delegate: self
cancelButtonTitle: @"No"
otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)
Интересно, что он падает только при первом запуске приложения. После этого он работает отлично.