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 进行了测试。