アプリをテストしています。ロケールをドイツに変更した場合を除いて、すべて正常に動作しています。
基本的に、現地通貨で 2 つの値を入力すると、計算が行われ、ユーザーは情報を取得します。
ユーザーの数値入力は適切に処理されます。つまり、「Editing Did End」で、数値を対応する現地通貨に変換するメソッドが実行されます。したがって、米国のユーザーが 10000 を入力すると、$10,000.00 が返されます。コードは次のとおりです。
- (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;
}
ただし、上記の通貨値を処理してユーザーの情報を取得したい場合に問題が発生します。つまり、アプリは $10,000.00 (または任意の通貨) から 10000 を取得して計算メソッドに送信する必要があります。コードは次のとおりです。
- (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;
}
何らかの理由で、米国、英国、日本、およびアイルランドのロケールは問題ありません。
大陸ヨーロッパ諸国は機能していません。
これを修正する方法についてのアドバイスは素晴らしいでしょう。