Я довольно новичок в Obj-C и изучаю использование протоколов и делегатов.
У меня нет проблем с приведением примеров для реализации протокола / передачи данных, когда есть только два представления, однако я получаю ошибку «нераспознанный селектор», когда пытаюсь вызвать метод, когда у меня есть несколько подпредставлений.
Например, в сценарии, где у меня есть
- FirstViewController
- SecondViewController
- ThirdViewController
Я быкак ThirdViewController для обратного вызова FirstViewController.
Общий код будет выглядеть примерно так:
в FirstViewController.h
@interface FirstViewController : UIViewController <MyProtocol>
в firstViewController.m
//present a second controller which will control settings for the app
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"secondViewController" bundle:nil];
secondViewController.delegate= self;
secondViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController: secondViewController animated: YES];
и позже
-(void) aMethod{
//carry out some action here
}
в secondViewController.m
//present a third controller...maybe a table view for selecting music
ThirdViewController *thirdViewController = [[ThirdViewController alloc] initWithNibName:@"thirdViewController" bundle:nil];
thirdViewController.delegate= self;
thirdViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController: thirdViewController animated: YES];
в ThirdViewContoller.h
//Create a protocol to implement options back on the firstViewController
@protocol MyProtocol;
@interface thirdViewController
{
IBOutlet UIButton *aButton;
}
@property (nonatomic, weak) id<MyProtocol> delegate;
-(IBAction) callMethod:(id)sender;
@end
@protocol MyProtocol <NSObject>
- (void) aMethod;
@end
в ThirdViewController.m
@synthesize delegate;
-(IBAction) callMethod:(id)sender{
[self.delegate aMethod];
}
При запуске кажется, что сообщение отправляется только в secondViewController, а не в firstViewController, потому что ошибка:
- [SecondViewController aMethod:]: нераспознанный selector отправлено в экземпляр 0x19d620
Я думаю, что есть какая-то фундаментальная концепция с настройкой точек делегатов, которые еще не изучены, или структура программы неверна.
Существует множество примеров кодаиспользуя только два представления, которые хорошо работают здесь, но я не нашел много информации о нескольких представлениях.Заранее извиняюсь, если мой дизайн программы действительно неправильный.