2016-09-08 2 views
0

Мы общаемся с сервером, который отправляет обратно номера в формате: "$229,000".iOS 10 NumberFormatter возвращает NIL, но работает на iOS9, iOS8, iOS7

Мы используем NSNumberFormatter, чтобы преобразовать это в ряд, как:

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

В любой версии IOS НИЖЕ IOS-10GM, символ валюты должен быть пустой строкой или ноль в противном случае форматировщик терпит неудачу и возвращает NIL.

Однако на iOS-10 вышеуказанный код не сработает, если мы не добавим символ валюты как "$".

Есть ли другие решения, кроме проверки версии iOS (через NSFoundationVersionNumber)?

ответ

2

Ваш код может быть сделано, чтобы работать на все версии прошивки, изменив его следующим образом:

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.

+0

Не забудьте добавить [formatter setLenient: YES]; если в вашей строке есть пробелы. – Reaper