gpt4 book ai didi

ios - 检测 [NSTimeZone localTimezone] secondsFromGMT 属性更改

转载 作者:行者123 更新时间:2023-11-28 19:04:55 27 4
gpt4 key购买 nike

在我们的应用程序中,我们使用 NSCalendar 来处理 NSDate 对象,例如获取日期组件。

这个 NSCalendar 实例是一个单例对象,因为我们在短时间内进行了大量的日期计算,并且我们注意到每次我们需要时使用 [[NSCalendar alloc] initWith...] 创建新实例会消耗太多时间。

问题是,如果您在整个应用程序执行期间都保留一个 NSCalendar 实例,那么即使时区发生变化,该实例也会保持时区属性不变。

所以,问题是我们想要检测时区的变化并通过以下任一方式做出正确 react :

self.singletonCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]

self.singletonCalendar.timezone = [NSTimezone localTimezone];

我们正在讨论的可能解决方案:

  1. 每次应用程序激活时更新时区属性。
  2. 使用 KVO 检测时区变化(尝试过但没有成功)。

谢谢,尼古拉斯。


实现了 Putz1103 提出的解决方案:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(significantTimeChangeNotification) name:UIApplicationSignificantTimeChangeNotification object:nil];

- (void)significantTimeChangeNotification
{
NSTimeZone *localTimezone = [NSTimeZone localTimeZone];
[KIDateUtils setCalendarTimezone:localTimezone];
}

最佳答案

我会做两个选项的混搭。我会在应用程序启动时更新它(或进入前台)。但是当应用程序当前在前台时,您可以为时间变化设置一个监听器,如 answer here :

“UIApplicationDelegate”有一个名为“applicationSignificantTimeChange:”的方法,当时间发生重大变化时会调用该方法。

关于ios - 检测 [NSTimeZone localTimezone] secondsFromGMT 属性更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com