NSArray *notifs = [[UIApplication sharedApplication]scheduledLocalNotifications];
我试图将所有通知存储在此数组中,但它似乎无法正常工作,数组始终为空,尽管通知会触发。
确实发生了严重迟钝的事情。
我有一个滑块机制,用于更新通知小时预设(如果用户收到通知,事件的实际日期前几小时)。
让我们说用户最初在下午2点选择活动时间,预设为1,所以通知会在下午1点开始,一切正常。
滑块机制也会执行以下操作,当它更改时,我会浏览所有通知并更改已触发的内容,以便相应地更新。这是代码:
-(void)updateNotifications{
NSArray notifs = [[UIApplication sharedApplication]scheduledLocalNotifications];
NSDateFormatter *dateFormatterForNsLog = [[NSDateFormatter alloc]init];
[dateFormatterForNsLog setDateStyle:NSDateFormatterFullStyle];
[dateFormatterForNsLog setTimeStyle:NSDateFormatterFullStyle];
NSString *notificationHourNew = [[NSUserDefaults standardUserDefaults]objectForKey:@"notificationHour"];
int notifHourNew = [notificationHourNew intValue];
int notifHourOld = [self.notificationHour intValue];
NSLog(@"Original notification hour is %d , and when exiting the view it is : %d",notifHourOld,notifHourNew);
int difference = notifHourOld - notifHourNew;
NSLog(@"The difference is : %d", difference);
if (difference != 0) {
[[UIApplication sharedApplication]cancelAllLocalNotifications];
for (UILocalNotification *notif in notifs) {
notif.fireDate = [NotificationHelper fireDateOfLocalNotificationForDate:notif.fireDate byAddingNumberOfHours:difference];
NSLog(@"Notification date is now:%@",[dateFormatterForNsLog stringFromDate:notif.fireDate]);
[[UIApplication sharedApplication]scheduleLocalNotification:notif];
}
}
这是在viewDidDissapear中触发的。
如果我增加滑块值,它仅适用于1种情况(我不明白为什么)。 示例:原始预设为4,我将其设为5(因此现在通知将在事件发生前5小时触发)。
如果我尝试将预设修改为5-> 4(减少),则数组为空(LOL)并且无效。为什么呢?
编辑:我用来改变日期的方法:
+(NSDate*)fireDateOfLocalNotificationForDate:(NSDate *)date byAddingNumberOfHours:(int)hours{
NSDate *initialDate = date;
NSDateComponents *comps = [[NSDateComponents alloc]init];
[comps setHour:+hours];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *fireDate = [calendar dateByAddingComponents:comps toDate:initialDate options:0];
return fireDate;
}
答案 0 :(得分:1)
解决了这个问题,问题是过去正在编程通知(如[NSDate date]之前 - 当前日期),我试图给它增加几个小时但显然苹果删除了可以通知的通知。因为自动日期不好而被解雇。