#ios #swift
#iOS #swift
Вопрос:
У меня есть 2 класса, и я пытаюсь использовать NotificationsCenter и Observers для отправки логического значения. Если логическое значение отправлено правильно, я хочу перемещаться по ViewController. Но, к сожалению, моя функция из Observer ( checkIsUserFromChecklist
) по некоторым причинам не запускается. Вот мой код:
extension Notification.Name {
static let isAccessedFromChecklistVC = Notification.Name(rawValue: "isAccessedFromChecklistVC")
}
// Class where I want to check if the boolean is changed
class ChecklistVC: UIViewController {
var isAccessedFromChecklist = true
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.post(name: .isAccessedFromChecklistVC, object: isAccessedFromChecklist)
}
//…
//…
//…
}
// Class where I want to get the value of the boolean
class FullscreenImageVC: UIViewController {
var isAccessedFromChecklistVC = false
// Remove observer from memory after we use it
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
createObservers()
}
func createObservers(){
NotificationCenter.default.addObserver(self,
selector: #selector(checkIfIsAccessedFromChecklist),
name: .isAccessedFromChecklistVC,
object: nil)
}
@objc func checkIfIsAccessedFromChecklist(_ notification: Notification){
if let object = notification.object as? Bool{
print("Object status: (object)") // Is never entering here.
isAccessedFromChecklistVC = object
}
}
func navigateToChecklist(){
if isAccessedFromChecklistVC == true {
let checklistVC = self.storyboard?.instantiateViewController(withIdentifier: "ChecklistVC") as! ChecklistVC
self.navigationController?.setViewControllers([self.navigationController!.viewControllers.first!, checklistVC], animated: true)
}
}
}
Спасибо, если вы это прочитаете.
Комментарии:
1. Ваш наблюдающий контроллер представления не отслеживает, когда создается сообщение, потому что кодирование самого уведомления в порядке. Кстати, вы не смогли найти лучшего способа для взаимодействия этих двух контроллеров просмотра?
Ответ №1:
Похоже, что это сообщение происходит
NotificationCenter.default.post(name: .isAccessedFromChecklistVC, object: isAccessedFromChecklist)
перед FullscreenImageVC
регистрацией vc в качестве наблюдателя
NotificationCenter.default.addObserver(self,
selector: #selector(checkIfIsAccessedFromChecklist),
name: .isAccessedFromChecklistVC
object: nil)
Поэтому убедитесь, что вы делаете публикацию, когда активен второй vc