2014-02-07 2 views
3

По-видимому, я почему-то застрял на NSNotification.Ошибки NSNotification

Я отправляю уведомление по методу кнопки IBAction. Когда пользователь удаляет эту кнопку, я хочу получить уведомление об этом, чтобы я мог установить текст в текстовом поле. Без нажатия кнопки кнопка NSString все равно будет равна нулю, поэтому мне нужно знать, когда они это делают.

Таким образом, в методе кнопки у меня есть это:

- (IBAction)suggestionsButton:(UIButton *)sender { 

    self.usernameSelected = sender.titleLabel.text; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"UserTappedButton" object:self]; 
} 

Это в классе UITableViewCell.

Я затем добавить наблюдателя в контроллере представления, которая связана с этим действием:

(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(userPickedAuserNameFromSuggestion:) name:@"UserTappedButton" object:nil]; 
} 

Вещи я Проверила:

  1. Этот метод наблюдатель называется первым, прежде чем метод пост (It is)
  2. Что касается имени для обоих методов
  3. То, что подпись селектора верна

Посмотрел на несколько ответов SO, а также не помог.

Есть ли что-то, что мне не хватает здесь, ребята?

* UPDATE *

К сожалению - вот метод, который я хочу назвать:

-(void)userPickedAuserNameFromSuggestion: (NSNotification *)notification 
{ 
    NSLog (@"Selected Username: %@", self.usernameCell.usernameSelected); 

} 

Однако его не называют

+0

Вы не говорите, в чем проблема. – rmaddy

+0

Можете ли вы показать свой метод - userPickedAuserNameFromSuggestion – rishi

+0

Вы уверены, что метод 'suggestButton:' вызывается, когда пользователь нажимает кнопку? – mttrb

ответ

2

Поместите -addObserver: в viewDidAppear и -removeObserver: в viewDidDisappear

- (void)viewDidAppear:(BOOL)animated 
{ 
    //... 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(userPickedAuserNameFromSuggestion:) 
               name:@"UserTappedButton" 
               object:nil]; 
    //... 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    //... 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:@"UserTappedButton" 
                object:nil]; 
    //... 
} 
+0

это действительно не решает проблему. infact, это делает его еще хуже, так как это предотвратит получение его 'viewController' уведомления. (_также ... это не ** абсолютно ** требуется для 'removeObserver:' когда представление исчезает, так как есть определенные сценарии, где вы, возможно, захотите, чтобы класс продолжал наблюдать, даже когда представление исчезает_) – staticVoidMan

+0

@staticVoidMan Это не требуется. Но зачем следить за уведомлением, если представление не отображается? Это может быть бесполезно (за исключением некоторых случаев, но меня интересует только уведомление, если представление действительно отображается). И для этого вопроса это решило его проблему (см. Комментарии), вот почему я поставил это как ответ. – Akhilrajtr

0

Я думаю, что ваш Notification наблюдатель не освобожден правильно, вам нужно сделать, это:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UserTappedButton" object:nil]; 

в dealloc функции.

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