2013-12-13 3 views
0

Как добавить UIView в качестве наблюдателя сообщения NSNotificationCenter?Добавить UIView в качестве наблюдателя сообщения NSNotificationCenter

Мне нужно связаться между одним представлением (CustomView1.m) и другим представлением (CustomView2.m). предпочтительно, не касаясь кода в VIEWCOntroller.

Вот как я пытаюсь его в данный момент:

Проводка уведомления от MyView1.m

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"InviteEmailClosedNotification" 
    object:self]; 

получения уведомления в моем MyView2.m

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

делать что-то когда они получены:

- (void) inviteEmailClosed{ 
    NSLOG(@"DO SOMETHING HERE"); 
} 

У меня есть UIView, определенный в xib, и я добавляю его в viewcontroller.

+0

непонятно, что вы спрашиваете? –

+1

Какая у вас проблема? – Tim

+0

Мне нужно отправить уведомление с одного вида на другое на контроллере представления ... Желательно, не записывая код в диспетчере представления и записывая его так, чтобы оба представления связывались друг с другом. – jimbob

ответ

0

Прослушивание с помощью ViewController вместо этого разрешило мою проблему, хотя и не на 100% идеально.

0

В классе, который вы указываете для addObserver:self, вместо self, дайте классу, который должен наблюдать сообщение, или если наблюдатель добавлен в класс, self правильно использовать.

Редактировать: вы уверены, что UIView в nib является правильным подклассом MyView2?

+0

Я обновил свой вопрос, чтобы сделать его более ясным. – jimbob

0

Ваш код выглядит хорошо - это правильный способ сделать это. Поэтому я собираюсь угадать, в чем проблема.

  • Выполнены ли эти строки кода? Установите точки останова на них и посмотрите.
  • Если у вас есть UIView, заданный в xib, помните ли вы, что его класс должен быть классом, который вы хотите, вместо того чтобы оставить его как UIView?
  • Действительно ли объект, который вы хотите добавить в качестве наблюдателя (это, вероятно, есть).
  • Установили ли вы точку останова на themeChanged и видели, если она вообще называется?
  • Действительно ли @"InviteEmailClosedNotification" название вашего уведомления?

Надеюсь, что эти случайные предложения помогут.

S

PS Использование строки для имени уведомления не является отличная идея - вероятно, вы должны определить его где-нибудь и использовать эту константу вместо этого. т.е.

#define InviteEmailClosedNotification @"InviteEmailClosedNotification" 

Это остановит опечаток :)

+0

Я создам класс центра уведомлений для статических строк, спасибо за это предложение :). Я хочу наблюдать от одного класса к другому (оба подкласса UIView, а не UIViewCOntrollers). это помогает прояснить :)? – jimbob

+0

Ваш код выглядит хорошо - должно быть что-то еще происходит. Вы уверены, что на самом деле вы отправили уведомление? (попробуйте установить NSLog или точку останова, чтобы увидеть). – deanWombourne

+0

ОК, так что это не помогло. Я NSLogged, чтобы узнать, что достигается. Передача передается ... Однако UIViews не получают их. – jimbob

0

В то время как Проводка уведомления от MyView1.m заданного объекта к нулю.

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"InviteEmailClosedNotification" 
    object:nil]; 
+0

, в чем причина этого помощника :)? – jimbob

+0

Это не повлияет - поскольку прослушиватель уведомлений передает 'nil' для своего параметра объекта, он уже будет прослушивать' InviteEmailClosedNotification's от _any_ объекта. – deanWombourne

+0

настройка объекта как нил будет транслировать ваше уведомление в любом месте приложения. –

Смежные вопросы