#ios #swift #nsnotificationcenter #notificationcenter
#iOS #swift #nsnotificationcenter #центр уведомлений
Вопрос:
Я столкнулся с неприятной проблемой с NotificationCenter, и я не могу найти, что не так с моим кодом. Я не знаю, есть ли какие-либо другие настройки, но каким-то образом мой notificationcenter либо не запускается, либо наблюдатель не прослушивает уведомление.
У меня в моем viewcontroller1.swift
@IBAction func onButtonPressed(_ sender: Any) {
NotificationCenter.default.post(name: .namePassedNotification, object: self)
}
и в моем viewcontroller2.swift
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(handleNotification), name: .namePassedNotification, object: nil)
}
@objc func handleNotification()
{
view.backgroundColor = .black
}
Я перепробовал все, что мог придумать или найти здесь, в stackoverflow, но, похоже, ничего не работает
Комментарии:
1. Он никогда не будет вызван, потому что вы добавили addObserver во второй контроллер представления, которого нет в стеке контроллера представления, поэтому просто измените код контроллера представления. Добавьте addObserver в первый контроллер представления и post observer во второй контроллер представления.
2. Вы не добавляете наблюдателя уведомлений в viewDidLoad.
3. Вы пробовали использовать здесь протокол делегирования связи? Другой вопрос: когда вы устанавливаете observer на viewcontroller2, находится ли viewcontroller1 в стеке навигации (контроллер все еще находится в памяти)? Пожалуйста, опишите соединение между этими двумя контроллерами.
4. @RajaKishan извините, это была опечатка при публикации вопроса, но да. Использование только self, которое ссылается на viewcontroller2, также не дает никакого результата
5. @ElTomato удаление наблюдателя из viewDidLoad в viewWillAppear также дало мне тот же результат, что и раньше