当应用程序在后台不在物理设备上工作时执行代码(SWIFT)

时间:2015-07-08 20:16:33

标签: ios swift

我正在创建一个应用程序,它依赖于在后台执行一些次要代码,我遇到了一个特殊的问题。
该应用有一个计时器NSTimer()。所有这一切背后的原理与计时器类似(在时钟应用程序中,安装在所有iOS设备上),这意味着,当计时器结束时,显示UILocalNotification

当我在Xcode中的模拟设备上运行时,一切都按预期工作,但是当我在iPhone上测试它时,没有通知。它有以下几点:

var end = timerHasEnded()
if end == true{
    println("the timer has ended")
}

它没有用。所以我检查了应用程序是否通过执行此操作检测到后台UIApplicationState,并且它不在物理设备上。有趣的是,它是在仿真设备上实现的。

我尝试在后台线程上运行计时器,使用QOS_CLASS_BACKGROUNDdispatch_async无效。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您是否可以安排在延迟后显示UILocalNotification,此时延迟是闹钟中剩余的剩余时间?

var date: NSDate = /*time until your timer expires*/
let app = UIApplication.sharedApplication()
let oldNotifications = app.scheduledLocalNotifications
if oldNotifications.count > 0 {
    app.cancelAllLocalNotifications()
}

let alarm = UILocalNotification()
alarm.fireDate = date
alarm.timeZone = NSTimeZone.defaultTimeZone()
alarm.repeatInterval = 0
alarm.soundName = "myAlarmSound.caf"
alarm.alertBody = "Do something!"

app.scheduleLocalNotification(alarm)

我是从Apple提供的Obj-C示例中编写此代码的。

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html