iOS 10 NumberFormatter返回NIL,但适用于iOS9,iOS8,iOS7

时间:2016-09-08 20:32:25

标签: ios objective-c nsnumberformatter

我们与服务器进行通信,该服务器以以下格式发回号码:"$229,000"

我们使用NSNumberFormatter将其转换为如下数字:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setCurrencyCode:@"US"];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[formatter setCurrencySymbol:@""];

在iOS-10GM以下的任何iOS版本上,货币符号必须为空字符串或nil,否则格式化程序将失败并返回nil。

但是,在iOS-10上,除非我们将货币符号添加为"$",否则上述代码将失败。

除了检查iOS版本(通过NSFoundationVersionNumber)还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式更改代码,使您的代码适用于所有版本的iOS:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

无需设置货币代码或符号,因为您要解析的字符串已经适合所设置的区域设置。

在将NSNumber传递给@"$229,000"时,该代码现在可以正确提供有效的numberFromString:

使用iOS 10,9.3和8.4测试。