1

次の行でユーザーの通貨記号を正しく表示するアプリがあります。

 NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];

また、デバイスのロケールを変更すると、選択した国のシンボルが正しくなります。

私が見つけたのは、金銭的価値がGBPにとどまっているように見えるということですか?

iTunes Connect で価格を 1.49 ポンドに設定していますが、ドイツに変更すると、1.70 ユーロではなく 1.49 ユーロが表示されますか?

デバイスが iTunes Connect から取得した価格はユーザーの通貨であるという印象を受けましたが、そうではありませんか?

言うまでもなく、私はパニック状態です....アドバイスをお願いします。

4

3 に答える 3

2

金額を表示するたびに為替レート Web サービスを呼び出す予定がない限り、通貨記号は元のロケール (£) のままにしておく必要があります。その理由は、API でプログラムされていない為替レートが変動するためです。そのため、価格はコードで自動的に更新されません。

ユーザーが iTunes に直接接続すると、Apple がすでにユーザー側で通貨換算を行っているため、正しい価格が表示されます。コードは独自の変換を行う必要があります。

于 2011-07-14T19:35:57.640 に答える
0

私はこのような価格を取得します:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response {

NSArray *a = [NSArray arrayWithArray:response.products];

SKProduct *p = [a count] == 1 ? [a objectAtIndex:0] : nil;


// if we have a product store the price, otherwise 

if (p) {

    NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];

    [self setPriceText:[NSString stringWithFormat:@"%@%@",sym, p.price]];

    [self setProductFound:YES];
}
else {

    [self setPriceText:@"Upgrade product not found"];

    [self setProductFound:NO];        
}

[request release];

}

于 2011-07-14T20:15:19.710 に答える
0

これがローカライズされた価格を表示する正しい方法であることがわかりました。

    NSArray *a = [NSArray arrayWithArray:response.products];

SKProduct *p = [a count] == 1 ? [a objectAtIndex:0] : nil;

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];

[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

[numberFormatter setLocale:p.priceLocale];

NSString *formattedString = [numberFormatter stringFromNumber:p.price];

ただし、デバイスに設定したロケールに関係なく、同じ金銭的価値を得ることができます.

于 2011-07-15T07:22:49.603 に答える