как вызвать функцию из другого класса с помощью NSNotification

У меня А класс и В класс.

В классе B я создал такую ​​функцию, как:

-(void)conferance:(NSNotification *)notification {

    [self conferanceConfirming:provisioningURL];

}

и в классе A я пытаюсь вызвать функцию класса B следующим образом:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(conferance:)name:nil object:nil];

Но это не работает. любая помощь ценна.


person Steven    schedule 01.08.2017    source источник


Ответы (2)


в классе B нужно написать

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(conferance:)name:@"ConferanceNotification" object:nil];

А из класса А надо просто позвонить

[[NSNotificationCenter defaultCenter] 
        postNotificationName:@"ConferanceNotification" 
        object:nil];

«ConferanceNotification» — это имя уведомления, которое наблюдает класс b. а затем он вызовет зарегистрированный селектор, как вы определяете.

person Rahul Patel    schedule 01.08.2017

Вам нужно добавить Observer в класс B и написать там метод.

Это код для класса B:

-(void)conferance:(NSNotification *)notification {

    [self conferanceConfirming:provisioningURL];

}
- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(conferance:)name:nil object:nil];
}

Вызов метода из класса A:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ConferanceNotification" 
        object:nil];

Вот краткая документация по NSNotification.

Вы ошиблись в AddObserver. Если у вас не добавлен NSNotificationObserver, то вы не сможете его вызвать. Поэтому вам нужно сначала добавить наблюдателя, а затем вы должны его вызвать.

person Nirmalsinh    schedule 01.08.2017
comment
Привет @Nirmalsinh, можно ли добавить Observer без viewDidLoad. - person Steven; 01.08.2017
comment
Вы можете поставить на init метод просмотра. Так что это поможет вам использовать в другом контроллере. - person Nirmalsinh; 01.08.2017
comment
Dealloc вызовет после того, как память представления будет удалена из стека. Так что это никогда не работает. - person Nirmalsinh; 01.08.2017
comment
viewDidLoad - лучший способ сделать это. - person Nirmalsinh; 01.08.2017
comment
Нет, я использовал глобальную переменную, - person Steven; 02.08.2017
comment
Где объявлена ​​функция globle?? - person Nirmalsinh; 02.08.2017