NSLocaleCurrencySymbol + price.stringValue を使用するだけでは問題があります。異なるロケールの特性を処理しません。通貨記号を前に置くかどうか。ノルウェー、デンマーク、スウェーデン、スイスはすべて、通貨を後に付けます。17.00Kr. また、ほとんどの (?) ヨーロッパ諸国では、「.」の代わりに「,」を使用します。小数の場合。「€2.99」ではなく「2.99€」。
より良い計画は、NSNumberFormatter を使用することです。Ed が示したように、SKProduct が返した "priceLocale" が鍵です。NSNumberFormatter に価格を正しくフォーマットするスマートさを与えます。
また、Objective-C カテゴリを使用して SKProduct に新しいプロパティを追加することで、これをより簡単にすることもできます。次の 2 つのファイルをプロジェクトに追加します。
SKProduct+priceAsString.h:
#import <Foundation/Foundation.h>
#import <StoreKit/StoreKit.h>
@interface SKProduct (priceAsString)
@property (nonatomic, readonly) NSString *priceAsString;
@end
SKProduct+priceAsString.m:
#import "SKProduct+priceAsString.h"
@implementation SKProduct (priceAsString)
- (NSString *) priceAsString
{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[self priceLocale]];
NSString *str = [formatter stringFromNumber:[self price]];
[formatter release];
return str;
}
@end
次に、#import "SKProduct+priceAsString.h"
コード内で、コード内で使用できるようにする必要がありproduct.priceAsString
ます。