首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果应用程序仍在运行,则在午夜将弹出到根视图。

如果应用程序仍在运行,则在午夜将弹出到根视图。
EN

Stack Overflow用户
提问于 2015-04-29 13:17:46
回答 4查看 163关注 0票数 0

如果应用程序在午夜仍在运行,并且即将过渡到新的一天,我将尝试将用户返回到应用程序的第一个屏幕。

我在用

代码语言:javascript
运行
复制
- (void)applicationSignificantTimeChange:(UIApplication *)application

去发现这个变化但是有一些问题..。

首先,在9:30或10:45发生了随机触发,导致应用程序过早地返回到主屏幕。我知道还有其他因素可以触发这种方法,比如夏时制和运营商发来的信息。但这两种方法都不适用于这一天,因为这一天触发得太早了。

因此,我在代码中添加了手动检查时钟时间和分钟的代码,以查看设备上的时间是否在晚上11:58到12:02之间。

代码语言:javascript
运行
复制
      //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
}

这可以通过手动调整设备时钟来测试。然而,我整晚离开了这个设备,第二天早上醒来,它从未触发过。

为什么这个方法这么挑剔?有没有更好的方法来处理我想做的事。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-07 17:25:37

为了解决这个问题,我做了以下工作。

  1. 当应用程序返回到前台时,我会检查时间,如果新的一天过去了,我会将它们注销。
  2. 如果用户在交叉过程中处于应用程序中,我在背景调查期间添加了一次检查,每4分钟运行一次,以检查数据,如果新的一天过去了,请将其注销。
票数 0
EN

Stack Overflow用户

发布于 2015-04-29 13:41:04

你在抱怨这个方法不可靠,想想看(注意到10分钟前我还不知道这个方法的存在),你可以用一种完全不同的方法。

这个职位中我了解到,您可以(通过通知)调度操作,而不是在午夜时检测,而是在午夜安排通知。弹出到根的方法会监听特定的通知,可能会检查它的有效负载以确保一些事情(这确实取决于您),如果测试通过了,因为假设它是在午夜发送的,您可以弹出。

我唯一不确定但我建议您测试的是,当应用程序处于背景/死亡状态时,是否会发送通知。

无论哪种方式,您都可以在发送通知之前轻松地检查UIApplicationState,并相应地做出相应的反应,以及当前的日期和时间,因此,当用户从后台返回或重新启动应用程序或其他任何东西时,您都知道该加载什么。

从零开始,没有太多的头脑风暴,以下是我对它的理解。

  • 用户正在使用该应用程序,现在发送和读取=>通知,前台状态=>弹出到root。
  • 用户在后台有应用程序=> (不确定通知) =>,可以在NSUserDefaults中设置一些东西来加载根VC,in -appWillEnterBackground
  • 用户已经杀死了应用程序,就像前面的步骤一样。

这使得您的所有情况都包含了一个方法和一个通知。现在,您只需测试它,以确保我没有忽略一些重要的事情。

票数 0
EN

Stack Overflow用户

发布于 2015-04-29 13:42:41

为了弹出到根视图控制器,可以使用:

代码语言:javascript
运行
复制
UIApplication *application = [UIApplication sharedApplication];
[application.keyWindow.rootViewController dismissViewControllerAnimated:YES completion:nil];

大约午夜的时候,我会检查一些事情来安排一个静默本地通知

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29944979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档