2015-06-18 1 views
2

У меня есть три viewControllers, и я пытаюсь отправить уведомление от viewController 3 до viewController 1 и 2. Я думаю, что лучший способ сделать это состоит в использовании NSNotification. Вот то, что я до сих пор:Где я должен поставить removeObserver от NSNotification

В классе С - сообщение уведомления

[[NSNotificationCenter defaultCenter] postNotficationName:@"Updated "object:self]; 

В классе В

В классе А и В - Регистрация первого для уведомления

// viewDidLoad 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdate:) name:@"Updated" object:nil]; 

-(void)handleUpdate:(NSNotification *)notification { 
    NSLog(@"recieved"); 
} 

Это работает до сих пор. Но когда я дерегистрировать его в классе А и В:

- (void)viewWillDisappear:(BOOL)animated { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

handleUpdate Метод действительно становится не называется. Поэтому очевидная проблема заключается в том, когда я removeObserver's для notification.

Мой вопрос: если все, что я сделал до сих пор, правильно, почему он не работает, когда я удаляю removeObserver? Если это не так, где я могу removeObserver's?

+3

в методе dealloc –

+0

Спасибо! Не могу поверить, что это было просто! – Jessica

ответ

1

Все, что вы сделали, это правильно. так работает уведомление. Если ваш класс A, B всегда должен обрабатывать обновление, вы не будете удалятьObserver. Потому что вы добавляете свой «addObserver» в viewDidLoad. это означает, что вы добавляетеОбсервер только один раз. Обычная ошибка заключается в том, что вы добавляете «addObserver» в «viewWillAppear» или «viewDidAppear», он добавляет в класс более одного раза наблюдателя. Затем вы должны удалитьObserver в viewDidDisappear.

+0

Нет, все не так, и да, вы должны удалить наблюдателя в какой-то момент - до того, как класс будет освобожден. – rmaddy

+0

@rmaddy Итак, следует ли вставлять removeObserver в метод dealloc? – Jessica

+0

@ Джессика Да, как и предложил Reming Hsu. – rmaddy

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