단지 NSLocaleCurrencySymbol + price.stringValue를 사용에 문제가있다 : 그것은 예를 들어 다른 로케일의 특수성을 처리하지 않습니다. 통화 기호를 앞에 놓았는지 여부. 노르웨이, 덴마크, 스웨덴, 스위스는 모두 통화를 예치합니다. 17.00Kr. 또한 대부분의 (?) 유럽 국가에서는 ','대신 ','을 사용합니다. 십진수의 경우, 예. "2.99 €가 아닌"2,99 € "입니다.
더 나은 계획은 NSNumberFormatter를 사용하는 것입니다. Ed가 시연 한대로 SKProduct가 반환 한 "priceLocale"이 핵심 요소입니다. NSNumberFormatter는 가격을 정확하게 형식화하기 위해 현명합니다.
Objective-C 카테고리를 사용하여 SKProduct에 새 속성을 추가하면 훨씬 쉽게 만들 수 있습니다.
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
을 사용할 수 있습니다.
출처
2010-05-24 20:58:54
gid
그것은 아름다운 해결책입니다, 이것을 추가해 주셔서 감사합니다! 나는 당신의 해결책에 대한 해답을 바꾸었다. – favo
어떻게 다른 통화로 이것을 테스트 할 수 있습니까? – knagode
여하튼 이것은 "US $"을 돌려주었습니다. 나는 iOS6으로 업그레이드했을 때 이것을 알 수있다. 왜 그런가? –
schystz