Добавете „addObserver“ (NSNotificationCenter) в 1-ви контролер за изглед, манипулирайте във 2-ри

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

Искам постоянно да изпращам разстояние от първия контролер за изглед и да го обработвам във втория. Вторият контролер за изглед, добавен като подизглед: addSubview, addChildViewController.

Това е нещо като излъчване в android.


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 от A view controller и да регистрирате слушателя и да го обработвате в B, всеки път, когато се публикува известие, методът somethingHappens ще бъде извикан автоматично, тъй като се регистрирате слушателят на този метод. - person taffarel; 13.06.2013
comment
Благодаря ти! реши проблема ми! - person Felipe Xavier; 18.12.2015
comment
мога ли да изпратя известие до всички контролери в моето приложение за iOS? - person reza_khalafi; 20.01.2016

Има друг начин да направите това (в случай, че искате да уведомите други контролери за изглед, ако стойността на даден обект се е променила). Можете да използвате KVO (Key-Value Observing): http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVOBasics.html

person Second Front    schedule 13.06.2013