0

このコードを使用して、デバイスの現地通貨記号を取得しています。

 NSLocale *theLocale = [NSLocale currentLocale];
 NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol];
 NSLog(@"Symbol : %@",symbol);
 NSString *code = [theLocale objectForKey:NSLocaleCurrencyCode];
 NSLog(@"Code : %@",code);

アプリを再起動すると通貨記号が変更されますが、バックグラウンドからアプリを実行すると通貨記号が更新されません。

  1. iPhoneの設定で、地域を米国に変更し、通貨記号が「$」で表示されるアプリを起動しました。
  2. インドの地域を変更し、バックグラウンドからアプリを取得して同じコードを呼び出すと、再び「$」が表示されます。通貨記号が更新されていません。戻ってきて画面に再入力すると、通貨記号がインドの記号に更新されます。

appDelegate で:

- (void)applicationWillEnterForeground:(UIApplication *)application:

[[NSNotificationCenter defaultCenter] postNotificationName:@"CurrencyUpdated" object:nil];

sampleViewController の場合: viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadCurrencySymbol) name:@"CurrencyUpdated" object:nil];

sampleViewController では:

-(void) reloadCurrencySymbol
{
    NSLocale *theLocale = [NSLocale currentLocale];
    NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol];
    NSLog(@"Symbol : %@",symbol);
    NSString *code = [theLocale objectForKey:NSLocaleCurrencyCode];
    NSLog(@"Code : %@",code);
}

誰でもこの問題を解決するのを手伝ってもらえますか? 前もって感謝します。

編集

[self viewDidLoad] を思い出しました。しかし地域は変わっていません。前の画面に戻って再度同じ画面に入ると、リージョンが更新されます。誰でもこれを解決するのを手伝ってもらえますか? ありがとう。

4

2 に答える 2

1

sampleviewコントローラーで、これをviewdidLoadに追加します

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadCurrencySymbol) name: UIApplicationDidBecomeActiveNotification object:nil];

これは、アプリがアクティブになったときにシンボルをリロードする正しい方法です

于 2012-07-23T13:03:55.810 に答える
0

言語を変更したときにアプリを再起動して新しいロケールで起動する必要があるMacOSXに似ている可能性があります。

私はあなたが最初にやめる必要があるだろうと推測しています、そしておそらくそれを回避する他の方法はありません。

于 2012-07-23T12:42:46.873 に答える