우리의 앱에서는 NSCalendar를 사용하여 NSDate 객체를 처리합니다. 예를 들어 요일 구성 요소를 가져 오는 중입니다.감지 [NSTimeZone localTimezone] secondsFromGMT 속성 변경
이 NSCalendar 인스턴스는 단시간에 많은 계산을하기 때문에 싱글 톤 객체입니다. 우리가 필요로 할 때마다 [[NSCalendar alloc] initWith ...]를 사용하여 새 인스턴스를 생성하는 것으로 나타났습니다. 많은 시간.
문제는 응용 프로그램 실행 시간 동안 NSCalendar 인스턴스를 유지하면이 인스턴스는 표준 시간대가 변경된 경우에도 변경되지 않은 상태로 유지됩니다. 우리가 논의하고
self.singletonCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]
또는
self.singletonCalendar.timezone = [NSTimezone localTimezone];
가능한 해결책 :
그래서, 문제는 우리가 시간대 변경을 감지하고 싶은 중 하나에 의해 적절하게 반응한다는 것이다
- 각 시간대의 시간대 속성 업데이트 응용 프로그램이 활성화됩니다.
- KVO를 사용하여 시간대 변경 사항을 감지합니다 (성공하지 못한 경우이를 시도 함).
감사합니다. Nicolás. Putz1103에 의해
구현 제안 된 솔루션 :
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(significantTimeChangeNotification) name:UIApplicationSignificantTimeChangeNotification object:nil];
- (void)significantTimeChangeNotification
{
NSTimeZone *localTimezone = [NSTimeZone localTimeZone];
[KIDateUtils setCalendarTimezone:localTimezone];
}
업데이트시 제안 된 솔루션을 Putz1103에 게시했지만 rmaddy가 제공 한 답변입니다. Putz1103은'UIApplicaitonDelegate' 메소드'applicationSignificantTimeChange :'를 사용하여 제안했습니다. – rmaddy