@IBAction函数中NSNotificationCenter的问题

时间:2015-11-18 01:55:18

标签: xcode swift nsnotificationcenter ibaction nsnotification

我正在开发一个应用程序,它要求我的主视图控制器从其子视图控制器接收通知。为此,我在父控制器的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])
}

1 个答案:

答案 0 :(得分:0)

尝试使用您提到的流程,以下代码确实从子视图控制器接收通知消息。

ParentViewController

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!!!"
    }
}

ChildViewController

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