2017-09-30 1 views
1

は、私が-localTimeZoneを使用し、[NSTimeZone]への以降の呼び出しで、その後GMT に[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];[NSTimeZone localTimeZone]は[NSTimeZone defaultTimeZone]を無視しています。私は私のアプリを起動すると

を私のデフォルトのタイムゾーンを設定します。 iOS 10まで、すべて正常に動作し、返されたタイムゾーンとしてGMT-0が得られました。さて、iOS 11では、GMT-3のローカルタイムを取得します。

また、代わりに-defaultTimeZoneを呼び出すと、正解であるGMT-0も得られます。 -localTimeZoneがその動作を変更した理由を誰かが知りましたか?

答えて

4

これはiOS11のバグです。私はレーダーを提出しました。これは、アップル社が "DUPLICATE OF 33629367"(iOS11.1ベータ版では未だオープンな問題です)とマークしています。ほとんどの場合、localTimeZoneの使用をやめるのが最善です...これはスレッドの悪夢です。物事が動作するようになっている方法

  • [NSTimeZone systemTimeZone]は常に、システムのタイムゾーンを返します。システムタイムゾーンが変更された場合、このメソッドを再クエリする必要があります(返されるNSTimeZoneは自動更新されません)
  • [NSTimeZone defaultTimeZone]は、defaultTimeZoneが設定されていない限りsystemTimeZoneを返します。デフォルトタイムゾーンまたはシステムタイムゾーンが変更された場合、このメソッドを再クエリする必要があります(返されるNSTimeZoneは自動更新されません)
  • [NSTimeZone localTimeZone]は、defaultTimeZoneが返すタイムゾーンを返します。 systemTimeZoneまたはdefaultTimeZoneが変更された場合、返されたNSTimeZoneは自動更新を実行します。したがって、関数の途中で更新することができます。 iOS11で

、[NSTimeZone localTimeZone]は[NSTimeZone systemTimeZone]

と同等であると思われます
関連する問題