scheduledLocalNotifications数组为空

时间:2014-04-19 10:03:26

标签: ios nsarray alert uilocalnotification

    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;

}

1 个答案:

答案 0 :(得分:1)

解决了这个问题,问题是过去正在编程通知(如[NSDate date]之前 - 当前日期),我试图给它增加几个小时但显然苹果删除了可以通知的通知。因为自动日期不好而被解雇。