与locales的货币困境

时间:2011-07-14 19:32:51

标签: iphone locale currency nslocale

我的应用程序正确显示用户货币符号:

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

当我更改设备的区域设置时,所选国家/地区的符号正确无误。

我发现货币价值似乎保留在英镑?

所以我在iTunes Connect的价格设定为1.49英镑,但当我改为德国时会显示1.49欧元而不是1.70欧元?

我的印象是,设备从iTunes Connect获得的价格将是用户货币,是不是这样?

不用说我处于恐慌模式......有什么建议吗?

3 个答案:

答案 0 :(得分:2)

除非您计划在每次显示金额时调用货币汇率网络服务,否则您希望将货币符号保留在原始区域设置(£)中。原因是因为汇率波动,而API没有编程,因此价格不会自动更新。

当用户直接连接到iTunes时,他们会看到正确的价格,因为Apple已经完成了货币转换。您的代码需要进行自己的转换。

答案 1 :(得分: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];

}

答案 2 :(得分: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];

然而,无论我在设备上设置什么样的区域设置,我仍然可以获得相同的货币价值,从我在其他帖子中阅读的内容以及Apple文档中我应该看到区域设置货币价值???