从appDelegate看到一个视图控制器

时间:2015-09-01 11:12:06

标签: ios swift uiviewcontroller segue

我有一个应用程序设置来接收推送通知。当用户收到通知时,我的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代码获得正确的层次结构

1 个答案:

答案 0 :(得分:0)

是否可以在应用的初始视图控制器中检查该通知?就像把通知作为布尔值传递一样?您可以查看viewWillAppear之类的地方:并检查它 - 如果它在那里控制来自该视图的segue而不是尝试在appDelegate本身中执行它?

那样它会直接进入新视图,但是真的要通过一个加载了层次结构的视图控制器?