Я тестирую свое приложение. Все работает нормально, за исключением случаев, когда я меняю локали в Германию.
Обычно вы вводите 2 значения в местной валюте, происходит расчет, и пользователь получает информацию обратно.
Цифровые вводы пользователей обрабатываются хорошо. То есть, в «Editing Did End» выполняется метод, который преобразует число в эквивалент в местной валюте. Таким образом, если пользователи из США введут 10000, им будет возвращено 10 000 долларов. Вот код:
- (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;
}
Однако проблема возникает, когда я хочу обработать вышеуказанные значения валюты, чтобы получить информацию о пользователе. Таким образом, приложению теперь нужно получить 10000 от 10 000,00 долларов США (или любой другой валюты) для отправки в метод расчета. Вот код:
- (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;
}
Почему-то в США, Великобритании, Японии и Ирландии все в порядке.
Страны континентальной Европы не работают.
Любой совет, как это исправить, был бы великолепен.