2013-02-11 3 views
0

У меня есть этот простой кусок кода:UIAlertView делегат сбою при установке делегата для себя

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Contact" message:@"This contact does not exist yet" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:@"Not now", nil]; 
[alert show]; 

Если установить делегата «ноль», все хорошо. Однако, если я установил делегат на «я» и добавил либо делегат clickedButtonAtIndex, либо didDismissWithButtonIndex, приложение вылетает с EXC_BAD_ACCESS

+0

Вы положили в свой .h? – jcesarmobile

+0

Пожалуйста, зарегистрируйте свой .h-файл у вас есть #import DJB

+0

да, есть в заголовке – men

ответ

0

Я думаю, что вы не установили метод делегирования alertView.

Сначала установите протокол делегата alertView в файле .h.

 @interface MainViewController : UIViewController<UIAlertViewDelegate> 

Затем реализовать этот метод, он будет работать нормально

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    switch (buttonIndex) 
    { 
    case 0: 

     break; 
    case 1: 
     break; 

    default: 
     break; 
    } 
} 
0

ваша проблема в том, что ваш объект (само) не существует больше! но alertview попытается получить к нему доступ, поэтому вы получите EXC_BAD_ACCESS. Проверьте, жив ли ваш объект делегата (сам)!

+0

Это кажется хорошим моментом. Но в соответствии с потоком iOS, если я вызываю класс, содержащий предупреждение, iOs действительно отобразит предупреждение и немедленно вернется к вызывающему абоненту, так что на самом деле, я никогда не будет существовать с предупреждением. Могу ли я делегировать вызывающему абоненту? – men

+0

звонящий - ваш делегат! – Chakalaka

+0

Я поместил «clickedButtonAtIndex» в вызывающий класс, но он никогда не вызывается (авария больше не возникает). Я даже поставил didPresentAlertView в вызывающем, но он также никогда не вызывался. – men

0

Проблема была связана с моим потоком. У меня есть класс, вызывающий URL. Viewcontroller действительно закончил задолго до того, как на сервере появился ответ. Поэтому я должен был выполнить NSRunLoop в вызывающем абоненте, чтобы дождаться завершения связи с сервером. Основываясь на некоторой форме ExitCode, вызванной подпрограмме, я мог бы только отобразить предупреждение и заставить делегата обрабатывать нажатую кнопку. Спасибо, в любом случае, Чакалаке за то, что он поставил меня на трассу.

Смежные вопросы