我有一个应用程序设置来接收推送通知。当用户收到通知时,我的appDelegate中有回调。如果应用程序处于非活动状态且用户点击设备面板上的通知,我需要能够从这里开始。
应用程序的流程是登录视图控制器(如果loginBool为true,则会跳过该控制器),这将导致选项卡控制器。在选项卡控制器上,我有3个地方,我可以转到同一个viewController,ID为" FeedDetailedController"。
这是FeedDetailedController我需要传递并传入我在通知中收到的变量。这个控制器可以从3个不同的地方访问,其中2个是带有表视图的选项卡,当你点击一行时,它传入一个变量并执行一个segue。我需要从我的应用程序委托中删除它,即从通知中传入数据,就像我在行中所做的一样。
到目前为止尝试:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
println("received a notification")
PFPush.handlePush(userInfo)
if application.applicationState == UIApplicationState.Inactive {
println("in the notification if with \(userInfo)")
if let info = userInfo["custom"] as? Dictionary<String, AnyObject> {
if let reportId = info["reportId"] as? String {
println("\nFrom APS-dictionary with key \"type\": \(reportId)")
//pass in reportId to the viewcontroller somehow
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("NewFeedDetailedController") as! UIViewController
let navigationController = UINavigationController(rootViewController: vc)
self.window?.rootViewController?.presentViewController(navigationController, animated: true, completion: nil)
}
}
PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
}
else{
println("in the notification else")
//this is when the app is active, do I need to detect which view controller I am currently on before I can seg???
}
}
当前代码提供以下消息:
Warning: Attempt to present <UINavigationController: 0x12ed763d0> on <UINavigationController: 0x12ed11ce0> whose view is not in the window hierarchy!
哪个有意义,但我不知道我应该如何从appDelegate代码获得正确的层次结构
答案 0 :(得分:0)
是否可以在应用的初始视图控制器中检查该通知?就像把通知作为布尔值传递一样?您可以查看viewWillAppear之类的地方:并检查它 - 如果它在那里控制来自该视图的segue而不是尝试在appDelegate本身中执行它?
那样它会直接进入新视图,但是真的要通过一个加载了层次结构的视图控制器?