【发布时间】:2021-05-19 20:26:20
【问题描述】:
我有 2 个 ViewController,分别称为 ViewController1 和 ViewController2。
我正在从 ViewController1 向 ViewController2 发布通知,但在第一次发布时,第一次 NotificationCenter 不起作用。
当我从 ViewController2 回到 ViewController1 并再次尝试移动 ViewController2 时,那时 NotificationCenter 正在工作,
// ViewController1.swift
import UIKit
class ViewController1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
//Move to next VC
@IBAction func nextButtonClicked(_ sender: Any) {
NotificationCenter.default.post(name: Notification.Name("callMethodPrint1FromVC2"), object: nil)
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let vc2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2Id") as? ViewController2
navigationController?.pushViewController(vc2!, animated: true)
}
}
// ViewController2.swift
import UIKit
class ViewController2: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {
//Recieve notification
NotificationCenter.default.addObserver(self, selector: #selector(self.print1Method(notification:)), name: Notification.Name("callMethodPrint1FromVC2"), object: nil)
}
@objc func print1Method(notification: Notification) {
print("Notification came from VC 1")
}
@IBAction func backToVC1(_ sender: Any) {
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let vc2 = storyBoard.instantiateViewController(withIdentifier: "ViewController1Id") as? ViewController1
navigationController?.pushViewController(vc2!, animated: true)
}
//Remove notification object
deinit {
NotificationCenter.default.removeObserver(self, name: Notification.Name("callMethodPrint1FromVC2"), object: nil)
}
}
实际输出:
当我第一次将 ViewController1 移动到 ViewController2 时,必须调用 ViewController2 中的 print1Method 方法。
但它并没有像预期的那样工作。 我的代码中是否存在 Anu 问题或者我遗漏了什么?
【问题讨论】:
-
按下下一个按钮时您是否尝试调用 print1Method?
-
哈,是的。我正在尝试打印 print1Method 方法
标签: ios swift notificationcenter