Действие делегата никогда не вызывается - PullRequest
0 голосов
/ 27 октября 2011

У меня проблемы с использованием протоколов / делегатов, когда я пытался перезагрузить данные из UITableView в моем rootViewController, когда мое модальное представление отклонено.

Вот некоторый код из моего модального представления .h файл:

@protocol LoginWebViewDelegate <NSObject>
     -(void) updateFromModalView;
@end

@interface myModalView : UIViewController{
    id<LoginWebViewDelegate> loginDelegate; 
    ..
}
@property (nonatomic, assign) id<LoginWebViewDelegate> loginDelegate;
..
-(IBAction)dismiss;
..

В моем файле .m я синтезирую loginDelegate и выполняю действие dismiss, и оно активируется при нажатии кнопки.

-(IBAction) dismiss
{
    NSLog(@"Button Pressed!");
    [loginDelegate updateFromModalView];
}

Далее в интерфейсе моегоrootViewController Я добавил <LoginWebViewDelegate>, и вот моя реализация:

-(void) updateFromModalView
{
    [modalView dismissModalViewControllerAnimated:YES];
    NSLog(@"Reloading Data");
    [dataController readPlist];
    [dataTable reloadData];
    [dataTable beginUpdates];
    [dataTable deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:YES];
    [dataTable insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:YES];
    [dataTable endUpdates];
}

Метод updateFromModalView никогда не вызывается.Что мне не хватает?

1 Ответ

1 голос
/ 27 октября 2011

Вы пропустили (или не опубликовали) часть, в которой вы присваиваете значение loginDelegate.Вы упомянули синтезирование, но это только создает методы доступа, но не устанавливает значение.

Где-то в вашем коде вам нужно выражение вроде:

self.loginDelegate = _something_;

Или, какой бы объект ни создавал этот контроллер представления, он установил бы себя или другой объект в качестве делегата после его создания, но до его представления:

modalController = [[ModalController alloc] initWithNibName:@"ModalController];
modalController.loginDelegate = self;
[self presentModalViewController:modalController];
...