C'è un problema con usando solo NSLocaleCurrencySymbol + price.stringValue: non gestisce le peculiarità dei diversi locali, ad esempio. se mettono il simbolo della valuta davanti o no. Norvegia, Danimarca, Svezia e Svizzera mettono tutti la loro valuta dopo, ad es. 17.00Kr. Inoltre, la maggior parte dei (?) Paesi europei usa "," invece di "." per decimali, ad es. "2,99 €" anziché "2,99 €".
Un piano migliore consiste nell'utilizzare NSNumberFormatter. Il "priceLocale" restituito da SKProduct, come ha dimostrato Ed, è la chiave. Fornisce a NSNumberFormatter le capacità per formattare correttamente un prezzo.
È anche possibile semplificare molto l'operazione aggiungendo una nuova proprietà a SKProduct utilizzando una categoria Objective-C. Aggiungere i seguenti due file al progetto:
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
Quindi, #import "SKProduct+priceAsString.h"
nel codice e si dovrebbe essere in grado di utilizzare product.priceAsString
nel codice.
questa è una bellissima soluzione, grazie per aver aggiunto questo! Ho cambiato la risposta alla tua soluzione. – favo
Qualche idea su come testare questo con valute diverse? – knagode
In qualche modo questo sta restituendo "US $" per me. Ho notato questo quando ho aggiornato a iOS6, qualche idea perché? –
schystz