NSDateとNSDateFormatterを使用すると、プログラムの再起動時に領域フォーマットを変更してビューを変更すると、NSDateFormatterは新しいロケールを認識します。その時、NSLocale.CurrentLocaleはリージョンフォーマットの正しいロケールも返します。
もちろん、まだフォーマットされていた日付は、プログラムがアクティブになったときに表示される形式を含め、以前の形式のままです。この問題を解決するには、プログラムが再アクティブ化されたときに領域フォーマットの変更を検出し、変更された場合はすべてのビューをリセットする必要があります。論理的には、これはapplicationDidBecomeActiveイベント中に行う必要があります。
は驚くべきことに、UIApplicationDelegate :: OnActivated(applicationDidBecomeActive)が呼び出されたときに、NSLocale.CurrentLocaleはまだOLDロケールを返し、NSDateFormatterはまだ新しいフォーマットを認識しません!
新しいフォーマットを認識するのはわかりません。別のビューに変更すると、新しいフォーマットが認識されます。 iPhone Mailアプリは、再アクティブ化時に新しい領域フォーマットを即座に検出するので、プログラム起動時にそれを検出する方法があります。 NSCurrentLocaleDidChangeNotificationイベントがapplicationDidBecomeActiveの後に生成されている可能性がありますが、このイベントはモノトゥッチでは利用できません。
提案がありますか?
私はIOS4 +では、アプリケーションが実際に終了しないため、アプリケーションが再起動されるまで、どのようなグローバル設定(地域など)も更新されないと想定します。オプションで、IOS3.xアプリとして動作するようにアプリを設定し、アクティブなステータスを辞めるときに閉じることができます。 – jbehren