Chociaż wydaje się, że stary powiadomienia ramy miał lepsze wsparcie dotyczące tego, to tylko do czasu, zdajemy sobie sprawę, że nowe jest lepsze !!
Miałem podobne problemy, a poniżej próbka tego, jak stare powiadomienia mogą iść w parze z nowymi.
Aby być po bezpieczniejszej stronie, jest to 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
}
}
}
Chociaż nie jest to wyczerpujące, w zasadzie obejmowałem wszystko od minuty do roku.
I być bardziej szczegółowe,
// 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()
Jak to działa dla mnie, powinna ona prawdopodobnie do końca sobą. Spróbuj i daj mi znać, jeśli wystąpi problem.
I, dla dokładnego rozwiązania tego pytania, doradziłbym poniżej.
(Prawdopodobnie Apple nie myśleć o takim scenariuszu, ale to może być obsługiwane)
- Harmonogram powiadomienie o 8:30 PM
- Kiedy powiadomienie jest wyzwalane, należy go usunąć i harmonogram kolejne powiadomienie z innym identyfikatorem, dla równoważnika
NSCalendarUnitMinute
pokazanego powyżej.
- Voila, to działa !! (Czy też nie?)
Chcę opublikować UserNotification jutro o 20:30, który będzie powtarzać co minutę, jak to zrobić w UserNotification. –
@ S.J Nie widzę żadnych metod w interfejsie API, aby zmienić częstotliwość powiadomienia, o które prosisz. Widzę tylko opcje powtarzania raz dziennie. Czy było to możliwe z "UILocalNotification"? Co można zrobić, to w programie obsługi dla pierwszego powiadomienia ustawić nowe powiadomienie na minutę po uruchomieniu bieżącego. Będę szukał sposobu na osiągnięcie pożądanego zachowania. – JAL
Czy czytasz [dokumenty dotyczące UserNotifications] (https://developer.apple.com/reference/usernotifications)? – JAL