ARC и UIAlertView: нераспознанный селектор отправлен на экземпляр - PullRequest
10 голосов
/ 15 декабря 2011

Вот как я показываю 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'

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

Ответы [ 2 ]

13 голосов
/ 27 июня 2013

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

0 голосов
/ 04 мая 2016

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

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

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

...