我正在创建一个应用程序,它依赖于在后台执行一些次要代码,我遇到了一个特殊的问题。
该应用有一个计时器NSTimer()
。所有这一切背后的原理与计时器类似(在时钟应用程序中,安装在所有iOS设备上),这意味着,当计时器结束时,显示UILocalNotification
。
当我在Xcode中的模拟设备上运行时,一切都按预期工作,但是当我在iPhone上测试它时,没有通知。它有以下几点:
var end = timerHasEnded()
if end == true{
println("the timer has ended")
}
它没有用。所以我检查了应用程序是否通过执行此操作检测到后台UIApplicationState
,并且它不在物理设备上。有趣的是,它是在仿真设备上实现的。
我尝试在后台线程上运行计时器,使用QOS_CLASS_BACKGROUND
和dispatch_async
无效。有人能帮助我吗?
答案 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示例中编写此代码的。