在处理localNotification操作时无法从AppDelegate发布通知

时间:2015-09-25 23:19:31

标签: ios swift nsnotificationcenter

在我的app委托中,我正在尝试设置LocalNotification ActionHandler来执行segue并向目标ViewController发送通知以触发该类中的函数,但是在该行的某处,通知未被发布或接收正常。

值得注意的是,此时目标视图控制器还没有被保留。

这是我目前的代码: 来自AppDelegate的片段:

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {


    if identifier == "mainAction" {

        self.window?.makeKeyAndVisible()
        self.window?.rootViewController?.navigationController?.popToRootViewControllerAnimated(true)
        (self.window?.rootViewController as? UINavigationController)?.viewControllers.first?.performSegueWithIdentifier("Segue", sender: self)
        NSNotificationCenter.defaultCenter().postNotificationName("NC_SegueDidPerform", object: nil)    
}

,这是在接收视图控制器中:

override func viewDidLoad() {
    super.viewDidLoad()


    NSNotificationCenter.defaultCenter().addObserverForName("NC_SegueDidPerform", object: nil, queue: nil, usingBlock: ({ (notification: NSNotification!)  in

        print ("working")
    }))
}

我尝试将观察者放在ViewWillApear和ViewDidAppear中,但无济于事。该块只是没有被执行!

如何使其正常工作以便我可以在目标视图控制器中收到通知(或任何类型的信号?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你这样做是错误的。正如您正确指出的那样,调用performSegueWithIdentifier:并不能保证视图控制器立即可用,因此您触发下一行的通知无法到达目标视图控制器。建议的Apple方法是实现prepareForSegue:并将数据传递到目标VC。此方法是被调用者将任何所需数据传递到目标VC的机会。

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
   if (segue.identifier == "Segue") {
    // pass data to next view
   }
}