Попытка вызова нескольких viewControllers по одному через NSNotifications в iOS
У меня есть приложение, над которым я работаю, в котором есть несколько viewControllers, каждый из которых отображает один тест для пользователя. На данный момент пользователь может просмотреть каждый из них в отдельности. Тем не менее, я пытаюсь реализовать функцию, подобную мастеру, в которой пользователь может выбрать несколько тестов или все тесты, а приложение, в свою очередь, будет перебирать каждый тест, представляя каждый экран пользователю и после того, как пользователь отправит ввод, приложение перейдет к следующему тесту последовательно. После завершения всех тестов пользователь вернется на главный экран. Из того, что я прочитал, NSNotifications было бы лучшим способом сделать это, но я, честно говоря, новичок в этом и нуждаюсь в помощи. Я понимаю, что должен иметь в методе, который запускает мастера, строку:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(testChange:)
name:@"Test"
object:nil];
Я также знаю, что после завершения работы каждого viewController отправлять уведомления нужно следующим образом:
[[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:self];
Мой вопрос: если у меня есть десять или двадцать viewControllers, выбранных пользователем из таблицы, и эти выборки хранятся в массиве, нужно ли мне иметь столько вызовов метода addObserver и столько же postNotifications? То, что я хотел бы сделать, это просто просмотреть каждый viewController (выбранный пользователем), и как только пользователь завершит отправку ввода в этот viewController, этот viewController должен отправить сообщение, и пользователь должен перейти к следующему viewController, и после завершения всех тестов вернитесь к главному экрану. Так же, как к вашему сведению, мне нужно вызывать каждый метод ViewController (viewDidLoad).
Я прошу прощения, если мой вопрос сбивает с толку.
1 ответ
Вы правы, вам нужно вызвать addObserver для всех ваших контроллеров представлений, если вы хотите, чтобы все они получали уведомления. Я создал небольшой фрагмент кода, чтобы показать вам, как это делается. Я думаю, что у вас есть все ответы, которые вы просите. Просто попробуйте.
#import "ViewController.h"
@interface Employee:NSObject
@end
@implementation Employee
-(void)testMethod2:(NSNotification *)not{
NSLog(@"Test method2 is called");
}
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)postNotifications:(id)sender {
Employee *employee = [[Employee alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testMethod:) name:@"Notification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testMethod1:) name:@"Notification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:employee selector:@selector(testMethod2:) name:@"Notification" object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:nil];
}
-(void)testMethod:(NSNotification *)not{
NSLog(@"Test method is called");
}
-(void)testMethod1:(NSNotification *)not{
NSLog(@"Test method1 is called");
}
@end