我们与服务器进行通信,该服务器以以下格式发回号码:"$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
)还有其他解决方案吗?
答案 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测试。