在UILocalNotification中,我们使用String str1 = "11,22,13,31,21,12";
String str2 = "11,12,13,21,22,31";
之类的重复.....但我无法在iOS 10中找到UserNotification doc ...我怎样才能使用NSCalendarUnitMinute
重复iOS 10 NSCalendarUnitMinute
?
这里的代码将在晚上8:30安排本地通知,并在每一分钟后重复。
UserNotification
答案 0 :(得分:2)
虽然看来旧的通知框架对此有更好的支持,但直到我们意识到新的通知框架更好!!
我遇到了类似的问题,下面是旧通知如何与新通知同时进行的示例。
为了更加安全,这是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()
因为这对我有用,所以应该对你们其他人来说。如果有问题,请尝试告诉我。
而且,对于这个问题的确切解决方案,我建议如下。
(可能,Apple没有考虑过这种情况,但可以处理)
NSCalendarUnitMinute
等效项安排另一个使用不同标识符的通知。答案 1 :(得分:1)
使用UNCalendarNotificationTrigger
与DateComponents
代替NSCalendar
:
var date = DateComponents()
date.hour = 8
date.minute = 30
let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
let content = UNNotificationContent()
// edit your content
let notification = UNNotificationRequest(identifier: "myNotification", content: content, trigger: trigger)
您使用DateComponents
实例设置日期,并指定通知是否应与repeats
初始值设定项的UNCalendarNotificationTrigger
参数重复。
UNCalendarNotificationTrigger Documentation
请注意,Apple Docs中存在拼写错误(截至2013年6月13日)。如果您使用NSDateComponents
代替DateComponents
,则需要在date as DateComponents
参数中明确地投射dateMatching
。
在回复您的评论时,我认为UNCalendarNotificationTrigger
不支持您想要的行为(更改重复通知的频率)。
答案 2 :(得分:0)
请耐心等待,这是我的第一篇文章。
我们需要在ios 10中为我们的应用程序提供1分钟的重复间隔,并将其用作新旧框架组合的变通方法。
使用旧的计划重复本地通知:
UILocalNotification * ln = [[UILocalNotification alloc] init];
...
ln.repeatInterval = kCFCalendarUnitMinute;
ln.userInfo = @ {@" alarmID":...}
...
[[UIApplication sharedApplication] scheduleLocalNotification:ln];
这将创建和安排通常重复的LN,这些LN将显示为UNLegacyNotificationTrigger的UNNotification
我使用alarmID来连接新旧框架。
尝试:
UNUserNotificationCenter* center = [UNUserNotificationCenter
currentNotificationCenter];
[center getPendingNotificationRequestsWithCompletionHandler:^(NSArray<UNNotificationRequest *> * _Nonnull requests) {
NSLog(@"----------------- PendingNotificationRequests %i -------------- ", (int)requests.count);
for (UNNotificationRequest *req in requests) {
UNNotificationTrigger *trigger = req.trigger;
NSLog(@"trigger %@", trigger);
}
}];
使用新框架UNUserNotificationCenter方法: willPresentNotification: didReceiveNotificationResponse:
希望这有帮助