在我的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中,但无济于事。该块只是没有被执行!
如何使其正常工作以便我可以在目标视图控制器中收到通知(或任何类型的信号?
提前致谢。
答案 0 :(得分:1)
你这样做是错误的。正如您正确指出的那样,调用performSegueWithIdentifier:
并不能保证视图控制器立即可用,因此您触发下一行的通知无法到达目标视图控制器。建议的Apple方法是实现prepareForSegue:
并将数据传递到目标VC。此方法是被调用者将任何所需数据传递到目标VC的机会。
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "Segue") {
// pass data to next view
}
}