Конвертировать из фунтов в килограммы, возможно, используя базовые данные - PullRequest
0 голосов
/ 10 июня 2011

В моем приложении числа отображаются в фунтах.Мне нужно добавить опцию, чтобы использовать вместо этого килограммы.Кто-нибудь знает, как это сделать?Я использую основные данные для хранения номеров.Я знаю, что могу сделать все вручную, используя оператор if, а затем выполнить преобразование, но должен быть лучший способ.

РЕДАКТИРОВАТЬ На самом деле, я столкнулся с огромной проблемой.Это не так просто, как преобразование чисел.Поскольку я использую сборщик и хочу предложить международную имперскую поддержку, сборщик должен отображать целые, разумные числа в кг.Если я просто преобразую числа в килограммы, я получу десятичные числа, которые люди не будут знать, как использовать.Есть предложения?

Ответы [ 4 ]

5 голосов
/ 15 июня 2011

https://github.com/davedelong/DDUnitConverter

NSNumber *weightInPounds = [NSNumber numberWithInt:42];
NSNumber *weightInKilos = [[DDUnitConverter massUnitConverter] convertNumber:weightInPounds fromUnit:DDMassUnitUSPounds toUnit:DDMassUnitKilograms];

Довольно просто.

1 голос
/ 10 июня 2011

Я бы предложил использовать пользовательский NSFormatter для преобразования ваших чисел в строки для отображения.Вы всегда будете хранить свои данные в одном формате, предоставляя возможность отображать их в любом формате.Вам понадобится простая настройка (сохраненная через NSUserDefaults ), чтобы указать форматеру, какой формат использовать.Некоторые преимущества этого заключаются в том, что вам нужно иметь дело только с этим при отображении чисел.Поскольку вам уже нужно преобразовать числа в строки, чтобы отобразить их, в вашем коде будет очень мало изменений.Кроме того, вам вообще не придется менять свои основные хранилища данных, поскольку настройки хранятся в настройках приложения.Вы можете даже создать подкласс NSNumberFormatter для автоматического форматирования числа после преобразования.Вот пример реализации:

- (NSString *)stringForObjectValue:(NSNumber *)number {
    double val = [number doubleValue];
    BOOL isKGs = [[NSUserDefaults standardUserDefaults] boolForKey:@"wantsKGs"];
    if(isKGs) val *= 0.45359237;
    NSString *str = [super stringForObjectValue:[NSNumber numberWithDouble:val]];
    if(isKGs) return [str stringByAppendingString:@" kg"];
    return [str stringByAppendingString:@" lbs"];
}

Для получения дополнительной информации о пользовательских средствах форматирования см. Создание пользовательского средства форматирования .

0 голосов
/ 10 июня 2011

Это может быть хорошей идеей, чтобы кодировать ее так, чтобы она всегда работала с единицами измерения и масштабированием в качестве переменных.

Единицами измерения и масштабирования были бы "фунты" и 1,0, или "килограммы" и 0,45359237, или что-то еще.

0 голосов
/ 10 июня 2011

Есть так много способов сделать это.

Я бы сделал некоторые предположения о вашем приложении, но если вы хотите иметь возможность изменить (глобально) с фунтов на килограммы, то яВозможно, в вашем приложении есть диалоговое окно настроек, чтобы пользователь мог сохранить свое решение увидеть вещи в фунтах или килограммах, я бы затем сохранил это в настройках вашего приложения и использовал этот параметр как часть инициализации вашего приложения.тогда, где бы вы ни показывали значение в фунтах или килограммах, вам просто нужно проверить пользовательские настройки и соответственно изменить значения (и, возможно, любые метки в приложении), это будет так же просто, как проверка в коде, которыйизвлекает значения из базовой даты

Проверьте, сохраняются ли настройки как глобально доступная часть состояния;это может быть участник в вашем приложении-делегат, единственный элемент, содержащий настройки, или просто запрашивающий настройку там, где вам нужно ее проверить.Затем в коде, который обращается к данным lbs, проверьте настройку, если она установлена ​​в kg, выполните расчет и верните его обратно из кода доступа к данным в представление.

...