Ich teste meine App. Alles funktioniert gut, außer wenn ich die Standorte nach Deutschland ändere.Lokalisierung von Währungen in iPhone App
Im Grunde geben Sie 2 Werte in Ihrer lokalen Währung ein, eine Berechnung geschieht und der Benutzer erhält Informationen zurück.
Benutzer numerische Eingaben werden gut verarbeitet. Das heißt, bei "Editing Did End" wird eine Methode ausgeführt, die die Zahl in die entsprechende äquivalente Währung in der lokalen Währung umwandelt. Wenn US-Nutzer 10000 eingeben, erhalten sie $ 10.000,00 zurück. Hier ist der Code:
- (NSMutableString *) formatTextValueToCurrency: (NSMutableString *) numberString {
NSNumber *aDouble = [NSNumber numberWithFloat: [numberString floatValue]];
NSMutableString *aString = [NSMutableString stringWithCapacity: 20];
NSLocale *theLocale;
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
theLocale = [NSLocale currentLocale];
[currencyStyle setLocale: theLocale];
[aString appendString: [currencyStyle stringFromNumber:aDouble]];
[currencyStyle release];
return aString;
}
jedoch ein Problem tritt auf, wenn ich die oben genannten Währungswerte verarbeiten will den Benutzer seine/ihre Informationen zu erhalten. Das heißt, die App muss jetzt 10000 von 10.000,00 (oder in welcher Währung) erhalten, um sie in die Berechnungsmethode zu senden. Hier ist der Code:
- (float) getValueFromCurrency: (id) sender {
NSNumber *aDouble = [NSNumber numberWithFloat: 0.0];
UITextField *textField = (UITextField *) sender;
NSMutableString *aString= [NSMutableString stringWithCapacity: 20];
NSLocale *theLocale;
float result;
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
theLocale = [NSLocale currentLocale];
[currencyStyle setLocale: theLocale];
NSLog(@"The locale is %@", currencyStyle.locale.localeIdentifier);
//Above NSLog looks good because it returns de_DE
[aString appendString: textField.text];
//The append from text field to string is good also
aDouble = [currencyStyle numberFromString: aString];
//For some reason, nil is returned
result = [aDouble floatValue];
[currencyStyle release];
return result;
}
Aus irgendeinem Grund sind die US, UK, Japanisch und Irish Locales in Ordnung.
Kontinentaleuropäische Länder funktionieren nicht.
Jeder Ratschlag, wie man das beheben könnte, wäre großartig.