如果应用程序在午夜仍在运行,并且即将过渡到新的一天,我将尝试将用户返回到应用程序的第一个屏幕。
我在用
- (void)applicationSignificantTimeChange:(UIApplication *)application去发现这个变化但是有一些问题..。
首先,在9:30或10:45发生了随机触发,导致应用程序过早地返回到主屏幕。我知道还有其他因素可以触发这种方法,比如夏时制和运营商发来的信息。但这两种方法都不适用于这一天,因为这一天触发得太早了。
因此,我在代码中添加了手动检查时钟时间和分钟的代码,以查看设备上的时间是否在晚上11:58到12:02之间。
//Get current time
NSDate* now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
if ((hour>=23 && minute > 58) || (hour == 0 && minute < 2))
{
//return to main screen
}这可以通过手动调整设备时钟来测试。然而,我整晚离开了这个设备,第二天早上醒来,它从未触发过。
为什么这个方法这么挑剔?有没有更好的方法来处理我想做的事。
发布于 2015-05-07 17:25:37
为了解决这个问题,我做了以下工作。
发布于 2015-04-29 13:41:04
你在抱怨这个方法不可靠,想想看(注意到10分钟前我还不知道这个方法的存在),你可以用一种完全不同的方法。
从这个职位中我了解到,您可以(通过通知)调度操作,而不是在午夜时检测,而是在午夜安排通知。弹出到根的方法会监听特定的通知,可能会检查它的有效负载以确保一些事情(这确实取决于您),如果测试通过了,因为假设它是在午夜发送的,您可以弹出。
我唯一不确定但我建议您测试的是,当应用程序处于背景/死亡状态时,是否会发送通知。
无论哪种方式,您都可以在发送通知之前轻松地检查UIApplicationState,并相应地做出相应的反应,以及当前的日期和时间,因此,当用户从后台返回或重新启动应用程序或其他任何东西时,您都知道该加载什么。
从零开始,没有太多的头脑风暴,以下是我对它的理解。
appWillEnterBackground。这使得您的所有情况都包含了一个方法和一个通知。现在,您只需测试它,以确保我没有忽略一些重要的事情。
发布于 2015-04-29 13:42:41
为了弹出到根视图控制器,可以使用:
UIApplication *application = [UIApplication sharedApplication];
[application.keyWindow.rootViewController dismissViewControllerAnimated:YES completion:nil];大约午夜的时候,我会检查一些事情来安排一个静默本地通知。
https://stackoverflow.com/questions/29944979
复制相似问题