2013-03-11 3 views
0

Я пытаюсь сюда ViewController А чтобы таковой делегатом на UIAlertView в ViewController B, используя этот код:Настройка UIAlertView делегат

В ViewcontrollerA.m

-(IBAction)callCancelAlert:(id)sender{ 

ViewcontrollerB *controller = [[PhotoViewController alloc] init]; 

UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle: @"Announcement" 
         message: @"It turns out that you are playing Addicus!" 
         delegate: PhotoViewController 
         cancelButtonTitle:@"OK" 
         otherButtonTitles:nil]; 
[alert show]; 
//[alert release]; 
} 

и #import ViewcontorllerB.h

... но я получаю сообщение об ошибке «Неожиданное имя интерфейса ViewcontorllerB: ожидаемое выражение». Что это значит?

ответ

1

Ваш делегат должен быть экземпляром ViewControllerB, а не класса.

UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle: @"Announcement" 
         message: @"It turns out that you are playing Addicus!" 
         delegate: PhotoViewController 
         cancelButtonTitle:@"OK" 
         otherButtonTitles:nil]; 

в

UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle: @"Announcement" 
         message: @"It turns out that you are playing Addicus!" 
         delegate: controller 
         cancelButtonTitle:@"OK" 
         otherButtonTitles:nil]; 
+0

нормально, я попробовал это, и как только я нажимаю кнопку на UIAlertView я получаю эту ошибку: 0x3a61a5b6: LDR r12, [r3, # -8] и приложение сбой – user2014474

+0

Я полагаю, что я делаю что-то не так ... – user2014474

+0

Вы устанавливаете делегат на объект, который собирает сбор мусора, как только метод заканчивается. Таким образом, к моменту нажатия пользователем кнопки и UIAlertView пытается вызвать делегата, он использует указатель делегата, который теперь указывает на случайную память. Если вы собираетесь установить объект-делегат, вы должны убедиться, что объект-делегат сохранен/хранится где-то постоянным. Метод «показать» предупреждения предупреждает об этом в фоновом режиме, и ваш метод продолжает выполнение какого-либо кода сразу после метода show (в результате чего ваш созданный объект делегирования будет освобожден). –

0

Вы, наверное, не имею в виду delegate: PhotoViewController, что означает "установить делегат класса PhotoViewController".

Вместо этого, вы, вероятно, хотите:

UIAlertView *alert = [[UIAlertView alloc] 
        initWithTitle: @"Announcement" 
        message: @"It turns out that you are playing Addicus!" 
        delegate:controller 
        cancelButtonTitle:@"OK" 
        otherButtonTitles:nil]; 
Смежные вопросы