Сбой метода делегата UIAlertView

В моем приложении для iPhone у меня есть класс NSObjectA и класс UIViewController B. Я хочу вызвать метод экземпляра в классе B из A. Я использовал следующий код.

Bclass *vc = [[Bclass alloc]init];
[vc hideAlert:NSString];
[vc release];

и в классе В:

- (void)hideAlert:(NSString*)message{
    UIAlertView *shareAlrt = [[UIAlertView alloc] initWithTitle:@""
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [shareAlrt show];
    [shareAlrt release];
}

и метод вызывается и показывает AlertView. Когда я нажимаю кнопку «ОК», я хочу перейти к классу Cclass.

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        Cclass *vc = [[Cclass alloc]initWithNibName:@"Cclass" bundle:[NSBundle mainBundle]];
        [self presentModalViewController:vc animated:NO];
        [vc release];
    }
}

Но когда я нажимаю кнопку «ОК», приложение вылетает. Что тут происходит? Я добавил <UIAlertViewDelegate> в файл B class.h, но все равно та же ошибка. Пожалуйста помоги

Я получаю код ошибки *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType alertView:clickedButtonAtIndex:]: unrecognized selector sent to instance 0x81baa80'


person Mithun    schedule 06.06.2012    source источник


Ответы (2)


Просто измените метод

- (void)hideAlert:(NSString*)message{
    UIAlertView *shareAlrt = [[UIAlertView alloc] initWithTitle:@""
                                                    message:message
                                                   delegate:self
                                          cancelButtonTitle:nil
                                          otherButtonTitles:@"Ok",nil];
    [shareAlrt show];
    [shareAlrt release];
}
person Maulik    schedule 06.06.2012
comment
привет, у меня все еще есть проблема. Когда я вызываю метод делегата из любого другого AlertView, он работает нормально. Но когда я нажимаю кнопку «ОК» в представлении предупреждений, полученном сверху, метод не работает. - person Mithun; 06.06.2012
comment
В условии метода делегата проверьте имя UIAlertView и выполните соответствующее действие. Например, if(alertview == your_alertview_name), затем выполните какое-либо действие и т. д. - person hp iOS Coder; 06.06.2012
comment
@Mithun: с какой проблемой вы сталкиваетесь, когда нажимаете кнопку «ОК» в представлении предупреждений? - person Maulik; 06.06.2012
comment
я звоню - (void) hideAlert: (NSString *) сообщение из класса A и показываю представление предупреждения. Когда я нажимаю кнопку «ОК», я хочу перейти к другому представлению. Я получаю представление предупреждения, но когда нажимаю кнопку «ОК», получаю сообщение об ошибке *** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «-[__NSCFType alertView: clickedButtonAtIndex:]: нераспознанный селектор отправлен в экземпляр 0x81baa80» . - person Mithun; 06.06.2012
comment
но я создал еще одно представление предупреждений в классе B для действия UIButton, которое находится в самом классе B, и когда я нажал кнопку «ОК», он работает нормально. Таким образом, проблема связана только с представлением предупреждений из вышеуказанного метода. - person Mithun; 06.06.2012
comment
в классе A нет кода для оповещения. Я просто вызываю метод в классе B, и этот метод содержит представление оповещения. - person Mithun; 06.06.2012
comment
@hpiOSCoder, я тоже так пробовал. Но его сбой до того, как он достигнет метода делегата. - person Mithun; 06.06.2012
comment
@Mithun: я не понимаю вас должным образом ... Но я думаю, что [vc release]; вызывает сбой. Поскольку вы создаете объект класса B, а в следующей строке вы его выпускаете, так что... - person Maulik; 06.06.2012
comment
эй, ребята, исправил проблему. Я использовал центр NSNotification для вызова метода. Теперь он работает нормально. В любом случае спасибо за вашу поддержку. - person Mithun; 06.06.2012

На это был дан ответ, предполагая, что у вас нет другой кнопки, кроме кнопки отмены, названной «ОК». Предположение делается путем просмотра отображаемого кода.

Вы использовали кнопку «Отмена», на которой вы не можете управлять делегатом для выполнения каких-либо действий.

Если вы посмотрите документацию по ссылке на класс UIAlertViewDelegate

При желании вы можете реализовать метод alertViewCancel: для выполнения соответствующих действий, когда система отменяет ваше представление предупреждения. Если делегат не реализует этот метод, поведение по умолчанию — имитировать нажатие пользователем кнопки отмены и закрытие представления.

person hp iOS Coder    schedule 06.06.2012
comment
Я добавил - (void)alertViewCancel:(UIAlertView *)alertView в код, но когда я нажал кнопку, этот метод не вызывается. - person Mithun; 06.06.2012
comment
Итак, вы имеете в виду то, что я сказал, что вы использовали «кнопку отмены» только под названием «ОК». правильно? - person hp iOS Coder; 06.06.2012
comment
Да, ты прав. Это кнопка отмены, и ее имя ОК. - person Mithun; 06.06.2012
comment
Я не знаю, почему твоему - (void)alertViewCancel:(UIAlertView *)alertView Cancel не звонят. На самом деле это должно быть вызвано. но.. хммм. Кстати, подход Маулика может быть принят на время, чтобы избавиться от проблемы и двигаться дальше для достижения вашей цели. - person hp iOS Coder; 06.06.2012
comment
Кто, черт возьми, проголосовал за ответ? Мне действительно жаль его. По крайней мере, он мог бы прокомментировать причину отрицательного голосования X-( - person hp iOS Coder; 06.06.2012