Ios 如何通过故事板将数据从推送通知传递到ViewController?

Ios 如何通过故事板将数据从推送通知传递到ViewController?,ios,swift,push-notification,apple-push-notifications,Ios,Swift,Push Notification,Apple Push Notifications,这是我的iOS应用程序的一个片段: 其中,选项卡栏控制器是我的根控制器,后跟导航控制器,后跟表视图控制器,后跟最终视图控制器。当推送通知到达时,我需要将一些数据传递给这个最终视图控制器,以便填充那些空白的UITextView和UITextField。 这是我到目前为止编写的代码,但我不知道如何继续: func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : Any

这是我的iOS应用程序的一个片段:

其中,选项卡栏控制器是我的根控制器,后跟导航控制器,后跟表视图控制器,后跟最终视图控制器。当推送通知到达时,我需要将一些数据传递给这个最终视图控制器,以便填充那些空白的UITextView和UITextField。 这是我到目前为止编写的代码,但我不知道如何继续:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    //let tab :UITabBarController = self.window?.rootViewController as! UITabBarController
    //tab.selectedViewController = tab.viewControllers![3]
    print("NOTIFICA \n")
    print(userInfo)

    let tab :UITabBarController = self.window?.rootViewController as! UITabBarController
    tab.selectedViewController = tab.viewControllers![2]
}
这段代码应该允许我访问tab bar控制器的第三视图控制器,但我需要超越它,访问最终的视图控制器,并将UserInfo传递给它。我该怎么办?谢谢大家

更新

你可以使用,你可以阅读。在say FinalViewController中注册通知

当你收到通知时,你可以这样做

  func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    print("NOTIFICA \n")
    print(userInfo)

    NSNotificationCenter.defaultCenter().postNotificationName("MyNotificationReceived", object: userInfo)
  }

我认为这篇文章有两个问题

如何在收到推送通知时将用户带到最终视图控制器? 如何将推送通知的有效负载传递给最终视图控制器? 对于1,您必须首先确定用户通常如何进入最终视图控制器。根据情节提要,他将切换到第三个选项卡,在表视图中选择一个项目,然后加载最终视图控制器。因此,您必须通过编程将选项卡控制器切换到第三个视图控制器,然后获取导航控制器,然后模拟表视图中的项目选择,然后加载最终视图控制器

For 2通知可能无法正常工作,因为在发送通知时可能未加载最终视图控制器。这很难同步。在这种情况下,您可以使用NSStandardUserDefaults以用户默认值保存推送通知负载。然后,在最终视图控制器中,您可以检查是否有任何pref已存储为此流的一部分,如果有,请加载它,并用值填充文本字段和文本视图,并删除pref,以便下次加载时不填充值

这种方法将要在最终视图控制器中预加载的数据的推送通知和保存与该数据在最终视图控制器中的实际加载分离


另一个选项是将最终视图控制器作为模态视图控制器加载,并在接收通知时将数据传递给该控制器。当然,这仅适用于最终视图控制器的数据模型不要求它始终来自表视图控制器的情况。

从self.storyBoard.instatiateViewControllerYourViewController获取视图控制器对象,然后推送。我是否应该执行let storyboardname=UIStoryboardname:Main,bundle:nil-before?确定获取情节提要实例。还有一件事,您正在使用TabbBarController。所以要小心。@LoryLory NSNotificationCenter用于将消息从一个类传递到另一个类。这是iOS中的一种设计模式。让navController=self.window?.rootViewController为!UINavigationController let storyboard=UIStoryboardname:Main,bundle:nil let myViewController=storyboard.InstanceeviewController标识符myViewController navController.pushViewControllermyViewController,动画:您可以为viewcontroller添加和编辑自己的情节提要标识符。这非常有趣!我想我会马上去做,然后告诉你。一旦我成功了,我会把它标记为答案。非常感谢。请务必阅读有关NSNotificationCenter的内容,以便您对它有很好的了解,然后只有您才能正确使用它。恐怕我遗漏了一些内容,因为当我点击通知警报时,什么都没有发生……请回答我更新的问题,这就是为什么我告诉您阅读有关通知中心的内容。如果您的应用程序前面有FinalViewController,您按home,然后会出现一个通知,您可以点击,然后您就可以观看魔术了。在此之前,请阅读更多关于它的内容并理解它。如果您的应用程序没有启动FVC,那么观察员将永远不会注册,因此不会发布通知。我已经阅读了一些教程,但我真的不明白您的意思…它们显示了相同的代码,但没有说明更多内容,但它不起作用。。。
class FinalViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(FinalViewController.notificatonArrived(_:)), name: "MyNotificationReceived", object: nil)
  }

  func notificatonArrived(notification: NSNotification) {
    //do you updation of labels here
    let userInfo = notification.userInfo
  }

  deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
  }
}
  func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    print("NOTIFICA \n")
    print(userInfo)

    NSNotificationCenter.defaultCenter().postNotificationName("MyNotificationReceived", object: userInfo)
  }