2015-07-08 2 views
0

Я создаю приложение, которое зависит от выполнения некоторого второстепенного кода в фоновом режиме, и я столкнулся с особой проблемой.
Приложение имеет таймер, NSTimer(). Принцип, лежащий в основе всего этого, аналогичен принципу таймера (в приложении Clock, установленном на всех устройствах iOS), что означает, что когда таймер заканчивается, отображается UILocalNotification.Выполнение кода, когда приложение находится в фоновом режиме, не работающем на физическом устройстве (SWIFT)

Все работает как ожидалось, когда я запускаю его на эмулированном устройстве в Xcode, но когда я тестирую его на своем iPhone, никаких уведомлений нет. Это что-то вроде:

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

и не работает. Поэтому я проверил, даже если приложение обнаруживает фон UIApplicationState, делая это, и оно не находится на физическом устройстве. Интересно, что он делает это на эмулированном устройстве.

Я попытался запустить таймер на фоновом потоке, используя QOS_CLASS_BACKGROUND и dispatch_async безрезультатно. Кто-нибудь может мне помочь?

ответ

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) 

Я написал этот код из примера Obj-C, предоставленного Apple.

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

+0

Да, я могу подтвердить, что это единственный путь, я обнаружил, что вы можете отобразить уведомление, когда приложение работает в фоновом режиме. UIAlertViewController не может этого сделать – allisius

Смежные вопросы