Как обновить ежедневное локальное уведомление в iOS 10?

Я пытаюсь выяснить, как обновить сообщение в локальных уведомлениях, когда оно повторяется ежедневно.

В настоящее время у меня есть следующий код в моем AppDelegate:

func scheduler(at date: Date, numOfNotes: Int)
{
    let calendar = Calendar(identifier: .gregorian)

    let components = calendar.dateComponents(in: .current, from: date)

    let newComponents = DateComponents(calendar: calendar, timeZone: .current, hour: components.hour, minute: components.minute)

    let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: true)

    content.badge = numOfNotes as NSNumber

    content.body = "REMINDER: " + String(numOfNotes) + " needs to be looked at!"

    content.sound = UNNotificationSound.default()

    let request = UNNotificationRequest(identifier: "reminderNotification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().delegate = self

    UNUserNotificationCenter.current().add(request) {(error) in

    }
}

Я храню numOfNotes в UserDefaults, у меня есть UISwitch в моем UITableViewCell, что при включении вызывает scheduler функционировать так:

func remindMeSwitch(_ remindMeSwitch: UISwitch)
{   
    numOfNotes = UserDefaults.standard.integer(forKey: "Notes")

    let delegate = UIApplication.shared.delegate as? AppDelegate

    delegate?.scheduler(at: time, numOfNotes: numOfNotes)
}

Однако при настройке repeats параметр для true чтобы уведомление повторялось ежедневно в указанное время, numOfNotes вызывается только один раз, когда я переключаю UISwitch на.

Как настроить уведомление на ежедневное оповещение, но при этом иметь возможность обновлять уведомление по мере необходимости?

Благодарю.

1 ответ

Как правило, у вас нет возможности изменить локальные уведомления. Единственный способ - удалить / отменить старое уведомление и создать новое уведомление. Но вы можете использовать функцию копирования.

Например, если вы хотите изменить содержимое уведомления:

// create new content (based on old)
if let content = notificationRequest.content.mutableCopy() as? UNMutableNotificationContent {
    // any changes    
    content.title = "your new content's title"
    // create new notification
    let request = UNNotificationRequest(identifier: notificationRequest.identifier, content: content, trigger: notificationRequest.trigger)
    UNUserNotificationCenter.current().add(request)
}
Другие вопросы по тегам