计划的本地通知未被存储在scheduledLocalNotification数组中

如果用户当天还没有打开应用程序,我目前正在安排本地通知在每天下午6点出现一次。 如果用户已经加载了应用程序,那么我想取消当天的通知,并在明天下午6点安排一个新的通知。 但是,当我尝试迭代预定的通知列表(这不是应用程序中唯一的本地通知)时,通知显示正常,[[UIApplication sharedApplication] scheduledLocalNotifications]数组始终为空。 下面是给我麻烦的代码片段:

// See if we need to create a local notification to tell the user that they can receive a daily reward NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications]; // <- This is always empty // Iterate over all the pending notifications for( int iter = 0; iter < [notifications count]; iter++ ) { UILocalNotification* localNotification = [notifications objectAtIndex:iter]; if( [[localNotification.userInfo objectForKey:@"source"] isEqualToString:@"dailyReminder"] ) [[UIApplication sharedApplication] cancelLocalNotification:localNotification]; } NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; [calendar setTimeZone:[NSTimeZone localTimeZone]]; NSDateComponents *nowComponents = [calendar components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSSecondCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:serverDate]; int hour = [nowComponents hour]; int minute = [nowComponents minute]; int second = [nowComponents second]; int hoursToAdd = 18 - hour; NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; [comps setDay:1]; [comps setHour:hoursToAdd]; [comps setMinute:-minute]; [comps setSecond:-second]; NSDate *tomorrow6PM = [calendar dateByAddingComponents:comps toDate:serverDate options:0]; NSMutableDictionary* userInfo = [NSMutableDictionary dictionary]; [userInfo setObject:@"dailyReminder" forKey:@"source"]; scheduleNotification(tomorrow6PM, NSLocalizedString(@"Come Back!", @"daily reminder notification message"), NSLocalizedString(@"Launch", @"daily reminder notification button text"), [UIApplication sharedApplication].applicationIconBadgeNumber+1, userInfo); 

scheduleNotification函数很简单,只是构造一个本地通知:

 void scheduleNotification(NSDate* fireIn, NSString* bodyText, NSString* alertText, NSUInteger badgeCount, NSMutableDictionary* userInfo) { static int appCount = 0; appCount += 1; if(!isLocalNotificationEnabled()) return; Class localNotificationClass = NSClassFromString(@"UILocalNotification"); UILocalNotification* localNotification = [[localNotificationClass alloc] init]; if(!localNotification) return; localNotification.fireDate = fireIn; localNotification.timeZone = [NSTimeZone systemTimeZone]; localNotification.alertBody = bodyText; localNotification.alertAction = alertText; localNotification.soundName = UILocalNotificationDefaultSoundName; localNotification.applicationIconBadgeNumber = badgeCount; localNotification.userInfo = userInfo; [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; [localNotification release]; } 

我不明白为什么本地通知数组总是空的。 就像我之前说的通知显示在正确的时间,所以他们正在计划。 任何帮助表示赞赏。

现在有类似的问题。 我的猜测是,iOS不会立即安排通知,而只是在当前运行循环的最后。 我在同一个运行循环中多次设置scheduledLocalNotifications属性时遇到了这些问题,并且更改似乎没有相应更新。 我想我会保留本地通知数组的副本,只设置scheduledLocalNotifications并从不读取它。

 localNotification.fireDate = fireIn; 

在这一行检查wheather “fireIn”NSDateNSString对象。

如果是NSString ,请使用NSDateformatter将其转换为NSDate对象,然后将其分配给localNotification fireDate。

我以前面临同样的问题,并通过上述步骤解决。

如果日程安排具有无效的启动date,将不会计划并返回结果空数组,因为从来没有有效的一个日程安排,请尝试打印出下面的localNotification,您可能会发现问题。

 NSLog(@"Notification--->: %@", localNotification);