как запустить функцию в определенное время с помощью swift

В моем приложении я реализовал функцию проверки версии приложения с помощью строки bundleVersion. Теперь я хочу запускать эту функцию каждый день в 8:00 утра. Это приложение на основе киоска, которое не переходит в фоновый режим. Таким образом, приложение будет активным все время.

Я использую UILocalnotification, чтобы запланировать уведомление на это время. Теперь в моем приложении есть и другие UILocalnotification. Я не уверен, как я могу идентифицировать уведомления в методе делегата приложения didReceiveLocalNotification().

Мой способ запланировать уведомление ниже

func scheduleNotification() {

    //UIApplication.sharedApplication().cancelAllLocalNotifications()
    let notif = UILocalNotification()


    let calendar = NSCalendar.currentCalendar()
    let date = NSDate()

    var calendarComponents = NSDateComponents()

    calendarComponents = calendar.components([.Day,.Month,.Year], fromDate: date)

    let day = calendarComponents.day
    let month = calendarComponents.month
    let year = calendarComponents.year

    calendarComponents.day = day
    calendarComponents.month = month
    calendarComponents.year = year

    calendarComponents.hour = 8
    calendarComponents.second = 0
    calendarComponents.minute = 0
    calendar.timeZone = NSTimeZone.systemTimeZone()
    let dateToFire = calendar.dateFromComponents(calendarComponents)


    notif.fireDate = dateToFire
    notif.timeZone = NSTimeZone.systemTimeZone()
    notif.repeatInterval = NSCalendarUnit.NSWeekdayCalendarUnit


    UIApplication.sharedApplication().scheduleLocalNotification(notif)

}

Любая идея будет оценена.


person Nitya    schedule 31.08.2016    source источник
comment
Попробуйте это hackingwithswift.com/read/21/2/   -  person pedrouan    schedule 31.08.2016
comment
Что ж, вы можете сохранить идентификатор в объекте userInfo в сгенерированном UILocalNotification. См. документ Apple: developer.apple.com/library/ios/documentation/iPhone/Reference/   -  person firstinq    schedule 31.08.2016
comment
@pedrouan: Спасибо за ответ. Я не знаю, как уведомление не срабатывает, а метод didRecivedNotification не вызывается.   -  person Nitya    schedule 31.08.2016


Ответы (1)


Следующий метод может помочь вам выполнить любую задачу через регулярные промежутки времени, я использовал этот метод для вызова веб-службы через регулярные промежутки времени для обеспечения функции поиска:

let debounceTimer : NSTimer?
func test() {

        if let timer = debounceTimer {

            timer.invalidate()

        }

        debounceTimer = NSTimer(timeInterval: 0.3, target: self, selector: Selector("putmethodnamewhichneedstocall"), userInfo: nil, repeats: false)

        NSRunLoop.currentRunLoop().addTimer(debounceTimer!, forMode: "NSDefaultRunLoopMode")

    }

Для определенного времени ежедневно. См. эту ссылку SO: Ежедневное повторение локального уведомления в установленное время с помощью swift

Надеюсь, поможет.

person Shobhakar Tiwari    schedule 31.08.2016
comment
Спасибо за ответ. Мне нужно запускать функцию ежедневно в 8:00. С NSTimer мне нужно указать интервал. Было бы невозможно указать временной интервал. - person Nitya; 31.08.2016
comment
обновленный код со справочной ссылкой, используйте ее для запуска таймера соответственно - person Shobhakar Tiwari; 31.08.2016