在 iOS iTunes App Store 沙盒中测试我的应用程序时,我遇到了一个奇怪的问题。我有两个开发者测试帐户(通过 iTunes Connect 设置)- 一组使用英国商店,另一组使用乌克兰商店。
当应用程序启动时,它通过 SKProductsRequest 获取可用 IAP 项目的列表。然后它使用以下代码显示商品价格(它已作为 SKProduct 的类别实现,因此“self”指的是 SKProduct 实例):
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormatter setLocale:self.priceLocale];
return [currencyFormatter stringFromNumber:self.price];
据我所知,这几乎是 Apple 为这项任务推荐的代码。当我使用英国商店帐户测试我的应用内购买时,一切正常,价格以英镑显示。但是,当我使用乌克兰测试账户时,价格显示的是美元,而不是乌克兰格里夫纳。
进一步研究一下,我尝试在调试控制台中打印出一些 priceLocale 属性,如下所示:
NSLog(@"PriceLocale country Code: %@, localeIdentifier %@", , [self.priceLocale objectForKey:NSLocaleCountryCode], [self.priceLocale localeIdentifier]);
其输出是:
PriceLocale country Code: UA, localIdentifier en_UA@currency=USD
阅读区域设置标识符,似乎 @ 符号用于修改区域设置以覆盖某些设置,在这种情况下,货币似乎被设置为美元。问题是,我不知道为什么。任何人都可以就问题可能是什么提供任何建议,或者我如何进一步研究它?