为什么只调用我的最后一个本地通知函数?
Why only my last local notification function is getting called?
我是 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)
}
我认为您在 +iOS10 并且您正在使用 UserNotifications 框架,对吗?
您的 identifier
很可能具有 相同的 ,并且每个都是 UPDATING 之前的通知。
存在 identifier
的原因是为了帮助您更新以前具有相同标识符的通知。例如,您发送通知将分数从 0-0
更新为 0-1
。而不是在屏幕上有 2 个通知你现在只有一个。
您的解决方法是为每个使用不同的 标识符。
有关更多信息,请参阅此 moment 的 WWDC 视频
编辑后更新:
就像我说的......你所有的通知都有 "Quarterly"
作为它们的标识符。给他们每个人一个单独的名字。
一点帮助
您可以只添加 UUID().uuidString 作为标识符。
荣誉亲爱的
我是 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)
}
我认为您在 +iOS10 并且您正在使用 UserNotifications 框架,对吗?
您的 identifier
很可能具有 相同的 ,并且每个都是 UPDATING 之前的通知。
存在 identifier
的原因是为了帮助您更新以前具有相同标识符的通知。例如,您发送通知将分数从 0-0
更新为 0-1
。而不是在屏幕上有 2 个通知你现在只有一个。
您的解决方法是为每个使用不同的 标识符。
有关更多信息,请参阅此 moment 的 WWDC 视频
编辑后更新:
就像我说的......你所有的通知都有 "Quarterly"
作为它们的标识符。给他们每个人一个单独的名字。
一点帮助
您可以只添加 UUID().uuidString 作为标识符。
荣誉亲爱的