雖然看起來舊的通知框架有這方面更好的支持,這是唯一的,直到我們認識到,新的更好!
我有類似的問題,下面是如何舊通知可以與新的如何攜手的示例。
爲了更安全一點,這是Swift2.3
。
// Retrieve interval to be used for repeating the notification
private func retrieveRepeatInterval(repeatTemp: RepeatInterval) {
switch repeatTemp {
case .Never:
if #available(iOS 10.0, *) {
toDateComponents = NSCalendar.currentCalendar().components([.Hour, .Minute, .Day, .Month, .Year], fromDate: timeTemp!)
toDateComponents.second = 0
repeatNotification = false
} else {
repeatIntervalTemp = nil
}
case .EveryMinute:
if #available(iOS 10.0, *) {
toDateComponents.second = 0
repeatNotification = true
} else {
repeatIntervalTemp = .Minute
}
case .EveryHour:
if #available(iOS 10.0, *) {
toDateComponents = NSCalendar.currentCalendar().components([.Minute], fromDate: timeTemp!)
toDateComponents.second = 0
repeatNotification = true
} else {
repeatIntervalTemp = .Hour
}
case .EveryDay:
if #available(iOS 10.0, *) {
toDateComponents = NSCalendar.currentCalendar().components([.Hour, .Minute], fromDate: timeTemp!)
toDateComponents.second = 0
repeatNotification = true
} else {
repeatIntervalTemp = .Day
}
case .EveryWeek:
if #available(iOS 10.0, *) {
toDateComponents = NSCalendar.currentCalendar().components([.Hour, .Minute, .Weekday], fromDate: timeTemp!)
toDateComponents.second = 0
repeatNotification = true
} else {
repeatIntervalTemp = .WeekOfYear
}
case .EveryMonth:
if #available(iOS 10.0, *) {
toDateComponents = NSCalendar.currentCalendar().components([.Hour, .Minute, .Day], fromDate: timeTemp!)
toDateComponents.second = 0
repeatNotification = true
} else {
repeatIntervalTemp = .Month
}
case .EveryYear:
if #available(iOS 10.0, *) {
toDateComponents = NSCalendar.currentCalendar().components([.Hour, .Minute, .Day, .Month], fromDate: timeTemp!)
toDateComponents.second = 0
repeatNotification = true
} else {
repeatIntervalTemp = .Year
}
}
}
雖然這不是詳盡無遺,但我幾乎涵蓋了從一分鐘到一年的所有內容。
而且更詳細,
// RepeatInterval
enum RepeatInterval : String, CustomStringConvertible {
case Never = "Never"
case EveryMinute = "Every Minute"
case EveryHour = "Every Hour"
case EveryDay = "Every Day"
case EveryWeek = "Every Week"
case EveryMonth = "Every Month"
case EveryYear = "Every Year"
var description : String { return rawValue }
static let allValues = [Never, EveryMinute, EveryHour, EveryDay, EveryWeek, EveryMonth, EveryYear]
}
var repeatTemp: RepeatInterval?
var repeatIntervalTemp: NSCalendarUnit?
var timeTemp: NSDate?
var toDateComponents = NSDateComponents()
由於這個工作對我來說,它或許應該爲你休息。請嘗試讓我知道是否有問題。
而對於這個問題的確切解決方案,我建議下面。
(大概是,蘋果並沒有想到這樣的場景,但它可以處理)
- 時間表8:30 PM
- 當通知被觸發的通知,將其刪除並時間表另一個具有不同標識符的通知,用於上面顯示的
NSCalendarUnitMinute
等效項。
- 瞧,它的工作! (或沒有?)
我想在明天晚上8:30發佈UserNotification,這將重複每一分鐘,如何在UserNotification中做到這一點。 –
@ S.J我沒有看到API中的任何方法來改變你所要求的通知頻率。我每天只看到一次重複選項。用'UILocalNotification'有可能嗎?你可以做的是在第一次通知的處理程序中,在當前一次通知後的一分鐘內設置一個新的通知。我會繼續尋找一種方法來完成你想要的行爲。 – JAL
您是否閱讀過[UserNotifications文檔](https://developer.apple.com/reference/usernotifications)? – JAL