В делегата на моето приложение се опитвам да настроя LocalNotification ActionHandler, за да извърши преход и да изпрати известие до целевия 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)
}
и тук е в приемащия View Controller:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserverForName("NC_SegueDidPerform", object: nil, queue: nil, usingBlock: ({ (notification: NSNotification!) in
print ("working")
}))
}
Опитах се да поставя наблюдателя и във ViewWillApear и ViewDidAppear, но без резултат. Блокът просто не се изпълнява!
Как да го накарам да работи, така че да мога да получа известие (или някакъв вид „сигнал“ в целевия View Controller?
Благодаря предварително.
performSegue
не е незабавно, така че изпращате известието, преди да е завършило. Тъй като изваждате всички контролери преди началото, нямате контролери за наблюдатели, освен ако не пропускам нещо? Единствените контролери са коренът на контролера за навигация и контролерът за местоназначение на сегмента. Би било по-добре просто да кажете на дестинационния контролер, че е бил натиснат в резултат на действие чрез метода pripraveForSegue на основния контролер. - person Rory McKinnel   schedule 26.09.2015handleMainAction
, който приема вашияuserInfo
като аргумент. В този метод извикайтеperformSegue
и можете да предадетеuserInfo
вprepareForSegue
на целевия контролер. Не виждам нужда от известия, когато знаете кой е единственият наблюдател. Така че IMHO, просто използвайте методите, както е описано в началото на коментара. - person Rory McKinnel   schedule 26.09.2015