我有一个小时hoursArray
数组和分钟数组,现在我从系统minutesArray
中获取了current date
包含当前月份元素的数组,这意味着如果 4 月有 30 天,那么 hoursArray/ 中将有 30 小时/分钟minutesArray 我已插入数组中,并且我将当前日期作为数组的索引。
我所做的是通知在当天触发,但直到我每天使用应用程序才会在第二天触发,因为当我每天使用应用程序之前,当我转向后台模式和通知响铃时会调用触发时间方法。
现在我希望在日期更改时自动触发通知,即使我有几天不使用该应用程序,这些东西都应该didEnterBackground...
在appDelegate
我遵循了这个答案,但它每天用于同一时间但我希望每天与基于当前日期的数组索引的数组不同的时间(这意味着当天,例如今天是 4 月 19 日,小时和分钟数组的索引应该是 19 )。
这是我的数组的样子
小时数组 = [9, 10, 11, 13, 14, 11, 17, 2, 15, 5.... 等等]
分钟数组 = [23, 00, 04, 58, 59, 12, 01, 33,.... 等等]
方法调用appdelegate.m
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.viewController triggerAutomaticallyDaily];
[self applicationSignificantTimeChange:application];
[self refreshAlarm];
}
里面的方法viewcontroller.m
-(void)triggerAutomaticallyDaily {
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
NSDate *now = [NSDate date];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:now];
[components setHour:hoursArray[currentDay]]; //currentDay the todays date is 16 I am getting current date from system.
[components setMinute:minutesArray[currentDay]];
UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.fireDate = [calendar dateFromComponents:components];
notification.repeatInterval = NSDayCalendarUnit;
[notification setAlertBody:@"This is your task time"];
// notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
每个午夜后时间会发生显着变化,方法在Appdelegate
-(void)applicationSignificantTimeChange:(UIApplication *)application {
[self.viewController triggerAutomaticallyDaily];
}
刷新报警方法Appdelegate
- (void)refreshLabel
{
//refresh the alarm on the main thread
dispatch_async(dispatch_get_main_queue(),^{
[self.viewController triggerAutomaticallyDaily];
});
// check every 10000s
[self performSelector:@selector(refreshLabel) withObject:nil afterDelay:10000];
}
看看didEnterBackground...
当我退出我的应用程序时,通知方法只会被调用一次。不是吗??以及当我一周不打开应用程序但我想收到通知时,我如何收到每日通知,如何调用方法?每次在后台模式下都会调用方法吗?
有什么办法可以安排通知,当第一个通知完成时,第二个应该被触发,如果第二个完成,那么第三个应该被触发,等等在后台模式下,即使我一周不打开应用程序? ? 应根据数组中给出的当前日期和时间触发通知。
更新 我什至放置了刷新功能,它在每 10000 秒后刷新一次触发器,但它不起作用。
我还补充说significantTimechanges
,如果有午夜变化,但它在这里不起作用是我如何定义的。