Transmettre des données à une variable dans AppDelegate

J'ai un controller de vue qui permet à l'user d'entrer une certaine date (pour une alarme) et je veux que cette alarme se triggers quand l'application passe en arrière-plan, donc je veux passer le NSDate dans une variable dans le délégué d'application, quelle est la meilleure façon de le faire?

J'ai essayé d'utiliser ça

let appD = AppDelegate() appD.dat = dueDatePicker.date 

mais cela n'a pas fonctionné, une fois que l'user a sélectionné la date et a enregistré la sauvegarde, le controller de vue se met en relation avec le controller de la vue principale,

Voici le code que j'ai exécuté dans le délégué de l'application:

  var backgroundUpdateTask: UIBackgroundTaskIdentifier! var dat:NSDate? func beginBackgroundUpdateTask() { self.backgroundUpdateTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ self.endBackgroundUpdateTask() }) } func endBackgroundUpdateTask() { UIApplication.sharedApplication().endBackgroundTask(self.backgroundUpdateTask) self.backgroundUpdateTask = UIBackgroundTaskInvalid } func doBackgroundTask() { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { self.beginBackgroundUpdateTask() // Do something with the result. let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext let entityDescription = NSEntityDescription.entityForName("TaskModel", inManagedObjectContext: managedObjectContext!) let addTaskVC:AddTaskViewController = AddTaskViewController() println(self.dat) let calendar = NSCalendar.currentCalendar() let comp = calendar.components(NSCalendarUnit.CalendarUnitSecond, fromDate: date) let seconds = Double(comp.second) println(seconds) var timer = NSTimer.scheduledTimerWithTimeInterval(seconds, target: self, selector: "update", userInfo: nil, repeats: false) NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode) NSRunLoop.currentRunLoop().run() // End the background task. self.endBackgroundUpdateTask() }) } 

Mon problème est que la variable dat continue d'afficher la valeur nulle, provoquant le crash de l'application dès que le mode d'arrière-plan est entré, toute information est appréciée

Vous ne pouvez pas créer une instance de AppDelegate

Pour que votre application puisse déléguer, utilisez:

 let delegate = UIApplication.sharedApplication().delegate 

La syntaxe habituelle pour faire reference à l'instance AppDelegate est

 let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

Ne jamais appeler les initialiseurs de classs ayant été conçus (et instanciés) dans Interface Builder.

Essaye ça,

1) Init variable dans AppDelegate.swift

ex:

 var data:NSSsortingng!="" 

2) créer une instance AppDelegate dans votre viewcontroller

ex:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

3) Passez vos données par la valeur init sur la variable appDelegate.

ex:

 appDelegate.data="your_Sending_Data_to_AppDelegate"