我有一个使用UILocalNotification
设置重复通知的应用。当用户授予应用程序权限时,我会在AppDelegate.m
中设置一个通知,以便在每晚9点重复,但不会持续触发。
据我所知,如果用户在白天的某个时间点打开应用程序(即在昨天晚上9点和今天晚上9点之后当下一个消息发出时),通知将会触发,但是当他们没有整天打开应用程序时,没有通知到达。
我尝试在创建新通知之前取消didFinishLaunchingWithOptions
中的所有通知,而不取消并重新创建通知。我不知道还有什么可以尝试或为什么操作系统没有为我处理这个问题。我注意到在我的手机上使用其他人做列表应用程序时,在我打开应用程序之前,徽章计数通常不会更新。这是iOS限制吗?如果是这样,如果操作系统无法为您处理,除非您的应用程序被打开,为什么还要使用repeatInterval
?
以下是我用于创建通知的方法:
- (void)createLocalNotification {
// Create local notification
self.localnotif = [[UILocalNotification alloc] init];
self.localnotif.alertBody = @"Time to rate your day!";
self.localnotif.alertAction = @"Rate";
// Set a date of today for the date components
NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [[NSCalendar autoupdatingCurrentCalendar]
components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay
| NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
// Set the date components time to 9pm for notification
dateComponents.hour = 21;
dateComponents.minute = 0;
// Pass in userInfo dict
self.localnotif.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"mood rating", @"notification", nil];
NSDate *fireDate = [[NSCalendar autoupdatingCurrentCalendar] dateFromComponents:dateComponents];
// Set fireDate for notification and schedule it
self.localnotif.fireDate = fireDate;
self.localnotif.timeZone = [NSTimeZone systemTimeZone];
// Make the notification repeat every day
self.localnotif.repeatInterval = NSCalendarUnitDay;
[[UIApplication sharedApplication] scheduleLocalNotification:self.localnotif];
}
我在didFinishLaunchingWithOptions
AppDelegate.m
中调用此方法,如下所示:
if ([UIApplication sharedApplication].scheduledLocalNotifications.count >= 1) {
// handle notification here
} else {
[self createLocalNotification];
}
答案 0 :(得分:0)
iOS 8中可能有一件事,我认为您需要注册本地通知的通知。如果您尚未注册,它们将显示在应用内,但会在应用外部失败。