如何将数据从appdelegate传递给viewcontroller?

时间:2017-05-03 20:49:04

标签: ios swift3 appdelegate apn

您好我正在尝试在我的IOS应用中实现推送通知功能。目前我有代码,如果通过推送通知打开应用程序,将打开特定的viewcontroller。我这样做的方法是将视图控制器推到顶上。

我现在需要做的是从appdelegate将一些数据传递给viewcontroller。我理解从viewcontroller传递数据到viewcontroller是使用prepareforsegue。我试过这样做但它不起作用

我尝试研究如何完成这项任务但是stackoverflow上的很多答案都已经过时了,我没有能力转换为swift 3的快速代码。有人可以向我解释我将如何从中发送数据appdelegate到viewcontroller?

下面是显示在didFinishLaunchingWithOptions中的VC的代码

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let destinationViewController = storyboard.instantiateViewController(withIdentifier: "detailPin2") as! detailPinViewController

let navigationController = self.window?.rootViewController as! UINavigationController

navigationController.pushViewController(destinationViewController, animated: false)

2 个答案:

答案 0 :(得分:1)

好的 - 你已经完成了大部分工作......

使用segues时,iOS会创建您的视图控制器,并允许您在准备中访问它,您可能已经完成了以下操作:

if let vc = segue.destination as? detailPinViewController {
     vc.myVariable = "this is the data to pass"  
}

didFinishLaunchingWithOptions中,您正在创建创建部分和“演示”部分......所以您只需添加“传递数据”部分:

let destinationViewController = storyboard.instantiateViewController(withIdentifier: "detailPin2") as! detailPinViewController

destinationViewController.myVariable = "this is the data to pass"

let navigationController = self.window?.rootViewController as! UINavigationController

navigationController.pushViewController(destinationViewController, animated: false)

那应该这样做。

答案 1 :(得分:1)

  //在app委托范围内的某处声明变量
 @UIApplicationMain
 class AppDelegate:UIResponder,UIApplicationDelegate {

 var window:UIWindow?
 var myVariable:String =“Hello Swift”


 func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?) - > Bool {
 //在应用程序启动后覆盖自定义点。
返回true
 }
 //一些其他app委托的方法....

}

 //在你的视图控制器
类ViewController:UIViewController {

 @IBOutlet weak var myLabel:UILabel!
让appDelegate = UIApplication.shared.delegate为! AppDelegate的
让myOtherVariable = appDelegate.myVariable

 override func viewDidLoad(){
 super.viewDidLoad()
 //在加载视图后进行任何其他设置,通常是从笔尖开始。
 myLabel.text = myOtherVariable
 var anotherVariable:String = appDelegate.myVariable // etc ...

 }

 override func didReceiveMemoryWarning(){
 super.didReceiveMemoryWarning()
 //处理可以重新创建的任何资源。
 }


}