Добавьте addObserver (NSNotificationCenter) в 1-й контроллер представления, обработайте во 2-м

Я видел несколько примеров добавления наблюдателя и дескриптора в один и тот же класс, но я хочу знать, можно ли добавить наблюдателя в контроллер первого представления и обработать его во втором контроллере представления?

Я хочу постоянно отправлять расстояние от первого контроллера просмотра и обрабатывать его во втором. Контроллер 2-го представления добавлен как вспомогательное представление: addSubview, addChildViewController.

Это что-то вроде трансляции в андроиде.


person Idan Moshe    schedule 13.06.2013    source источник
comment
Почему бы и нет? Это именно цель NSNotificationCenter.   -  person    schedule 13.06.2013


Ответы (2)


Да, это возможно. NSNotificationCenter работает именно так.

Во-первых, вам нужно будет зарегистрировать слушателя в первом контроллере представления, как показано ниже.

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

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

}

Во-вторых, опубликуйте уведомление от второго контроллера представления, как показано ниже.

[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName" object:obj];

Система разошлет уведомление всем слушателям.

person taffarel    schedule 13.06.2013
comment
Я немного запутался, я использую postNotificationName, когда хочу сказать: «Все в порядке, обработать событие», верно? Но «somethingHappens» должно быть во втором контроллере представления. Просто чтобы уточнить, какой код должен быть в правильном контроллере. - person Idan Moshe; 13.06.2013
comment
если вы хотите отправить уведомление от viewcontroller A на viewController B, тогда вам нужно использовать postnotification от контроллера представления, а также зарегистрировать слушателя и обработать его в B, каждый раз, когда отправляется уведомление, метод somethingHappens будет вызываться автоматически, так как вы регистрируетесь слушатель этого метода. - person taffarel; 13.06.2013
comment
Спасибо! решил мою проблему! - person Felipe Xavier; 18.12.2015
comment
Могу ли я отправить уведомление на все контроллеры в моем приложении iOS? - person reza_khalafi; 20.01.2016

Есть другой способ сделать это (если вы хотите, чтобы другие контроллеры представления знали, изменилось ли значение объекта). Вы можете использовать KVO (наблюдение за ключом): http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVOBasics.html.

person Second Front    schedule 13.06.2013