2017-05-03 2 views
1

Bonjour J'essaie d'implémenter une fonction de notification push dans mon application IOS. Actuellement, j'ai un code qui va ouvrir un viewcontroller spécifique si l'application a été ouverte via la notification push. La façon dont je fais ceci est en poussant le viewcontroller sur le dessus.Comment passer des données d'appdelegate à un viewcontroller?

Ce que je dois faire maintenant est de transmettre des données à l'viewcontroller du appdelegate. Je comprends pour passer des données de viewcontroller à viewcontroller est d'utiliser prepareforsegue. J'ai essayé de faire ceci et cela n'a pas fonctionné

J'ai essayé de rechercher comment accompagner cette tâche mais beaucoup de réponses sur stackoverflow étaient obsolètes code swift que je n'ai pas la capacité de convertir en 3. rapide quelqu'un peut expliquer à moi comment pourrais-je envoyer des données de appdelegate à un viewcontroller?

Heres le code pour montrer la VC qui est en didFinishLaunchingWithOptions

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) 
+0

Afficher le code que vous utilisez pour * afficher * le conteneur virtuel depuis AppDelegate. – DonMag

+0

édité post. code devrait être en place maintenant – JackieXY

+0

Ai-je raté quelque chose? Vous êtes dans une fonction dans appdelegate et vous avez un pointeur vers votre VC de destination. Vous ne pouvez pas appeler une fonction membre de votre VC avec les données que vous avez l'intention de transmettre? – Spads

Répondre

1

OK - vous avez la plupart des travaux déjà fait ...

Lorsque vous utilisez des enchaînements, iOS crée votre contrôleur de vue et vous donne accès à le préparer à, où vous avez probablement fait quelque chose comme ceci:

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

en didFinishLaunchingWithOptions, vous faites partie de la création, un d la partie « présentation » ... de sorte que vous pouvez simplement ajouter dans le « transmettre les données » partie:

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) 

et qui devrait le faire.

-1
//Declare you variable somewhere within the app delegate scope 
@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    var myVariable: String = "Hello Swift" 


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     return true 
    } 
// some other app delegate’s methods.... 

} 

//In your view controller 
class ViewController: UIViewController { 

    @IBOutlet weak var myLabel: UILabel! 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let myOtherVariable = appDelegate.myVariable 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     myLabel.text = myOtherVariable 
     var anotherVariable: String = appDelegate.myVariable // etc... 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


}