:http://blog.timac.org/?tag=nslocaletemperatureunit
まず、NSLocaleTemperatureUnit NSLocaleKey公開:
temperatureUnit = [[NSLocale currentLocale] objectForKey:NSLocaleTemperatureUnit]
またはスウィフト:
FOUNDATION_EXPORT NSLocaleKey const NSLocaleTemperatureUnit;
が続いてこれでユニットをチェックします(2.3):
if let temperatureUnit = NSLocale.currentLocale().objectForKey(NSLocaleTemperatureUnit) {
...
}
"Celcius"または "Fahrenheit"のいずれかの文字列を返します。
しかし、10より前のバージョンのiOSと下位互換性がないという問題があります。iOS 9以前のデバイスでアプリを実行すると、「dyld:Symbol not found:_NSLocaleTemperatureUnit」というエラーが表示されますアプリの起動。
解決策は、NSLocaleTemperatureUnit変数定義に弱いリンクを使用することです。このように:
FOUNDATION_EXPORT NSLocaleKey const NSLocaleTemperatureUnit __attribute__((weak_import));
これは、アプリがdyldのチェックを通過させます。しかし、NSLocaleTemperatureUnitを使用する前にOSのバージョンを確認する必要があります。そうしないと、アプリケーションがクラッシュして例外が発生します。
if #available(iOS 10,*) {
if let temperatureUnit = NSLocale.currentLocale().objectForKey(NSLocaleTemperatureUnit) {
...
}
}
EDIT:
私は私のアプリでそれを試してみましたが、私はTestflightにアップロードしたときに、アップルはそれのためのアプリを拒否しました。だから彼らは間違いなく私たちが独自のフォーマッタクラスに設定を使用することを望んでいません。私はかなり迷惑なことがわかります。
この設定を使用する場所から始めましょう。私は温度次元をフォーマットするためにNSDimensionFormatterクラスで遊んできましたが、Settingsアプリケーションから "Temperature Unit"設定を尊重しているようには見えません。この設定に基づいて表示を変更するものは見つかりましたか? – rmaddy