Попытка вызова нескольких 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
Другие вопросы по тегам