Почему вызывается только моя последняя функция локального уведомления?

Я новичок в Swift и пытаюсь вызвать несколько функций, которые запрашивают локальное уведомление внутри UISwitch IBAction. Я хочу отправить уведомление в определенную дату - каждый квартал года в месяцы 4, 7, 10, 1. Вызывается только функция четвертого квартала. Как я могу вызвать все четыре функции? Вот мой код:

// UISwitch для ежеквартальных уведомлений

@IBAction func quarterlyFrequencyTapped(_ sender: UISwitch) {

if quarterlyFrequency.isOn == true {

    firstQuarter(); secondQuarter(); thirdQuarter(); fourthQuarter()

    print("quarterly frequency is \(quarterlyFrequency.isOn)")

} else {

    removeQuarterlyNotification()

    print("quaterly frequency is \(monthlyFrequency.isOn)")

       }

}

// Функции для всех четырех кварталов

func firstQuarter() {
    let firstQuarterContent = UNMutableNotificationContent()
    firstQuarterContent.title = "First Quarter"
    firstQuarterContent.subtitle = "Some string"
    firstQuarterContent.body = "Some other string"

    var firstQuarterDate = DateComponents()
    firstQuarterDate.month = 3
    firstQuarterDate.day = 11
    firstQuarterDate.hour = 19
    firstQuarterDate.minute = 20

    let firstQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: firstQuarterDate, repeats: true)
    let firstQuarterRequestIdentifier = "Quarterly"
    let firstQuarterRequest = UNNotificationRequest(identifier: firstQuarterRequestIdentifier, content: firstQuarterContent, trigger: firstQuarterTrigger)
    UNUserNotificationCenter.current().add(firstQuarterRequest, withCompletionHandler: nil)
}

func secondQuarter() {
    let secondQuarterContent = UNMutableNotificationContent()
    secondQuarterContent.title = "Second Quarter"
    secondQuarterContent.subtitle = "Some string"
    secondQuarterContent.body = "Some other string"

    var secondQuarterDate = DateComponents()
    secondQuarterDate.month = 3
    secondQuarterDate.day = 11
    secondQuarterDate.hour = 19
    secondQuarterDate.minute = 21

    let secondQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: secondQuarterDate, repeats: true)
    let secondQuarterRequestIdentifier = "Quarterly"
    let secondQuarterRequest = UNNotificationRequest(identifier: secondQuarterRequestIdentifier, content: secondQuarterContent, trigger: secondQuarterTrigger)
    UNUserNotificationCenter.current().add(secondQuarterRequest, withCompletionHandler: nil)
}

func thirdQuarter() {
    let thirdQuarterContent = UNMutableNotificationContent()
    thirdQuarterContent.title = "Third Quarter"
    thirdQuarterContent.subtitle = "Some string"
    thirdQuarterContent.body = "Some other string"

    var thirdQuarterDate = DateComponents()
    thirdQuarterDate.month = 3
    thirdQuarterDate.day = 11
    thirdQuarterDate.hour = 19
    thirdQuarterDate.minute = 22

    let thirdQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: thirdQuarterDate, repeats: true)
    let thirdQuarterRequestIdentifier = "Quarterly"
    let thirdQuarterRequest = UNNotificationRequest(identifier: thirdQuarterRequestIdentifier, content: thirdQuarterContent, trigger: thirdQuarterTrigger)
    UNUserNotificationCenter.current().add(thirdQuarterRequest, withCompletionHandler: nil)
}

func fourthQuarter() {
    let fourthQuarterContent = UNMutableNotificationContent()
    fourthQuarterContent.title = "Fourth Quarter"
    fourthQuarterContent.subtitle = "Some string"
    fourthQuarterContent.body = "Some other string"

    var fourthQuarterDate = DateComponents()
    fourthQuarterDate.month = 3
    fourthQuarterDate.day = 11
    fourthQuarterDate.hour = 19
    fourthQuarterDate.minute = 23

    let fourthQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: fourthQuarterDate, repeats: true)
    //let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
    let fourthQuarterRequestIdentifier = "Quarterly"
    let fourthQuarterRequest = UNNotificationRequest(identifier: fourthQuarterRequestIdentifier, content: fourthQuarterContent, trigger: fourthQuarterTrigger)
    UNUserNotificationCenter.current().add(fourthQuarterRequest, withCompletionHandler: nil)
}

person nsd32    schedule 12.03.2017    source источник
comment
Откуда вы знаете, что вызывается только четвертый? В этом блоке кода нет ничего плохого.   -  person TheValyreanGroup    schedule 12.03.2017
comment
этот firstQuarter(); secondQuarter(); thirdQuarter(); fourthQuarter() выполняет все 4 ... ничего плохого. Возможно, ваши функции сами некорректно работают   -  person Honey    schedule 12.03.2017
comment
Чтобы проверить это, я настраиваю функцию каждого квартала с интервалом в одну минуту и ​​запускаю симулятор. В симуляторе запускается только четвертое уведомление.   -  person nsd32    schedule 12.03.2017
comment
Нет. Все 4 функции вызываются этой строкой кода. У вас еще что-то не так.   -  person TheValyreanGroup    schedule 12.03.2017


Ответы (2)


Я думаю, вы используете + iOS10 и используете фреймворк UserNotifications, верно?

Скорее всего, у ваших identifier есть то же, и все они ОБНОВЛЯЮТСЯ в предыдущем уведомлении.

Причина существования identifier заключается в том, чтобы помочь вам обновить предыдущее уведомление с таким же идентификатором. Например, вы отправляете уведомление, чтобы обновить счет с 0-0 до 0-1. И вместо двух уведомлений на экране теперь есть только одно.

Ваше исправление состоит в том, чтобы использовать разные идентификаторы для каждого.

Подробнее см. момент для видео WWDC.

ОБНОВЛЕНИЕ после вашего редактирования: как я уже сказал ... все ваши уведомления имеют "Quarterly" в качестве идентификатора. Дайте каждому отдельное имя.

person Honey    schedule 12.03.2017
comment
@ nsd32, раз уж ты здесь новенький. Как только вы получите ответ, который вам нравится, рекомендуется 1. проголосовать за него 2. нажать на чек, чтобы отметить как принятый ответ - person Honey; 12.03.2017
comment
Спасибо за совет. Я просто нажал на галочку, однако, поскольку моя репутация все еще низкая, голос за него не отображается, но, по-видимому, он все еще где-то записывается. Еще раз спасибо всем за помощь. - person nsd32; 12.03.2017

Просто небольшая помощь

Вы можете просто добавить UUID (). UuidString в качестве идентификатора.

Престижность Мед

person zdravko zdravkin    schedule 19.03.2020