我正在开发一个应用程序,它要求我的主视图控制器从其子视图控制器接收通知。为此,我在父控制器的viewDidLoad()
方法中设置观察者,并且当按下位于子视图控制器中的按钮时,我试图调用postNotificationName()
函数。 / p>
当postNotificationName()
调用位于@IBAction func buttonPressed(){ }
函数中时,观察者永远不会收到通知。但是,当从同一个视图控制器中的不同函数调用相同的代码时,它可以正常工作。
我认为这可能是一个线程问题,并且未能成功尝试过该问题的许多解决方案。不过,我对线程不太熟悉,所以也许我还是错过了它。有谁知道问题可能是什么?
感谢您的帮助!
的ViewController
class GameController: UIViewController {
override func viewDidLoad() {
super.init()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "attemptHumanMove:", name: Constants.NSNotificationKey.tilePressed, object: nil)
}
func attemptHumanMove(notification: NSNotification) {
print("test")
}
ChildViewController
@IBAction func tileTouched(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName(Constants.NSNotificationKey.tilePressed, object: nil, userInfo: ["a": 0])
}
答案 0 :(得分:0)
尝试使用您提到的流程,以下代码确实从子视图控制器接收通知消息。
class ViewController: UIViewController {
@IBOutlet weak var notificationMsgLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
notificationMsgLabel.text = "Waiting for notification..."
NSNotificationCenter.defaultCenter().addObserver(self, selector: "attemptHumanMove:", name: "tilePressed", object: nil)
}
func attemptHumanMove(notification: NSNotification) {
print("Notification message received!")
notificationMsgLabel.text = "Notification received!!!"
}
}
class ChildViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sendNotification() {
print("Sending notification message!!!")
NSNotificationCenter.defaultCenter().postNotificationName("tilePressed", object: nil, userInfo: ["a": 0])
}
}
在这里您可以找到故事板的屏幕截图: Storyboard Snapshot