将数据传递给AppDelegate中的变量

时间:2015-08-20 17:35:12

标签: ios swift

我有一个视图控制器,它让用户输入一个特定日期(用于警报),我希望在应用程序进入后台时运行此警报,所以我想将NSDate传递给App Delegate中的变量,最好的方法是什么?

我尝试使用此

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

但它没有成功,一旦用户选择了日期并点击保存,视图控制器就会转向主视图控制器,

继承了我在app delegate中运行的代码:

 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()
    })
}

我的问题是变量dat一直显示值nil导致应用程序在输入后台模式时崩溃,任何信息都表示赞赏

3 个答案:

答案 0 :(得分:1)

您无法创建AppDelegate

的实例

为了让你的app委托使用:

let delegate = UIApplication.sharedApplication().delegate

答案 1 :(得分:0)

引用AppDelegate实例的常用语法是

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

永远不要在Interface Builder中调用已设计(和实例化)的类的初始值设定项。

答案 2 :(得分:0)

试试这个,

1)AppDelegate.swift中的Init变量

例如:

var data:NSString!="" 

2)在viewcontroller中创建一个AppDelegate实例

例如:

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

3)在appDelegate变量上按init值传递数据。

例如:

appDelegate.data="your_Sending_Data_to_AppDelegate"