iOS 10 NumberFormatter returns NIL 但适用于 iOS9、iOS8、iOS7
iOS 10 NumberFormatter returns NIL but works on iOS9, iOS8, iOS7
我们正在与服务器通信,该服务器以以下格式发回号码:"9,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,否则格式化程序将失败并且 returns nil。
但是,在 iOS-10 上面的代码将失败,除非我们将货币符号添加为 "$"
。
除了检查 iOS 版本(通过 NSFoundationVersionNumber
)还有其他解决方案吗?
您的代码可以在 iOS 的所有版本上运行,方法如下:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
无需设置货币代码或符号,因为您正在解析的字符串已经适合正在设置的语言环境。
当将 @"9,000"
传递给 numberFromString:
时,该代码现在可以正确地给出有效的 NSNumber
。
使用 iOS 10、9.3 和 8.4 进行了测试。
我们正在与服务器通信,该服务器以以下格式发回号码:"9,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,否则格式化程序将失败并且 returns nil。
但是,在 iOS-10 上面的代码将失败,除非我们将货币符号添加为 "$"
。
除了检查 iOS 版本(通过 NSFoundationVersionNumber
)还有其他解决方案吗?
您的代码可以在 iOS 的所有版本上运行,方法如下:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
无需设置货币代码或符号,因为您正在解析的字符串已经适合正在设置的语言环境。
当将 @"9,000"
传递给 numberFromString:
时,该代码现在可以正确地给出有效的 NSNumber
。
使用 iOS 10、9.3 和 8.4 进行了测试。