Hay un problema con sólo usar NSLocaleCurrencySymbol + price.stringValue: no maneja las peculiaridades de los diferentes lugares, por ejemplo. si ponen el símbolo de moneda delante o no. Noruega, Dinamarca, Suecia y Suiza pusieron su moneda después, por ejemplo. 17.00Kr. Además, la mayoría (?) De los países europeos usan ',' en lugar de '.' para decimales, ej. "2,99 €" en lugar de "2,99 €".
Un mejor plan es usar NSNumberFormatter. El "priceLocale" que devolvió SKProduct, como demostró Ed, es la clave. Le da a NSNumberFormatter la inteligencia para formatear un precio correctamente.
También puede hacerlo mucho más fácil al agregar una nueva propiedad a SKProduct utilizando una categoría Objective-C. Añadir los dos archivos siguientes a su proyecto:
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
Luego, #import "SKProduct+priceAsString.h"
en su código, y debería simplemente poder usar product.priceAsString
en el código.
que es una hermosa solución, gracias por agregar esto! Cambié la respuesta a tu solución. – favo
¿Alguna idea de cómo probar esto con diferentes monedas? – knagode
De alguna manera esto está devolviendo "US $" para mí. Noté esto cuando me actualicé a iOS6, ¿alguna idea de por qué? –
schystz