我有一个视图控制器,它让用户输入一个特定日期(用于警报),我希望在应用程序进入后台时运行此警报,所以我想将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导致应用程序在输入后台模式时崩溃,任何信息都表示赞赏
答案 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"