问题描述
|
在我的应用程序中,数字显示为磅。我需要添加一个选项来代替公斤。有人知道该怎么做吗?我正在使用核心数据来存储数字。我知道我可以通过使用
if
语句然后进行转换来手动完成所有操作,但是必须有更好的方法。
编辑
实际上,我认为我遇到了一个大问题。它不像转换数字那样简单。因为我使用的是捡拾器,而且我想提供国际皇家支持,所以捡拾器应显示以公斤为单位的完整且合理的数字。如果仅将数字转换为kg,我将得到十进制数字,而人们将不知道该如何使用。有什么建议么?
解决方法
https://github.com/davedelong/DDUnitConverter
NSNumber *weightInPounds = [NSNumber numberWithInt:42];
NSNumber *weightInKilos = [[DDUnitConverter massUnitConverter] convertNumber:weightInPounds fromUnit:DDMassUnitUSPounds toUnit:DDMassUnitKilograms];
很简单
, 我建议使用自定义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\"];
}
有关自定义格式化程序的更多信息,请参见创建自定义格式化程序。
, 有很多方法可以做到这一点。
我必须对您的应用做出一些假设,但是如果您想选择(全局)从lbs更改为kgs,那么我可能会在您的应用程序中有一个设置对话框,以便用户可以继续他们的决定看到磅或公斤的东西,然后我将在您的应用程序设置中保持不变,并将此设置用作应用程序初始化的一部分。然后,无论您显示的是lbs还是kgs值,您只需要检查用户定义的设置并相应地调整值(以及应用程序中的任何标签),就如同检查代码中那样简单:从核心日期检索值
检查设置将其保留为可全局访问的状态;这可以是您的应用程序委托中的成员,可以是包含设置的单例,也可以只是在需要检查设置的地方仅请求设置。然后,在访问lbs数据的代码中,检查设置,如果将其设置为kg进行计算,然后将其从数据访问代码返回到视图。
, 将其编码为始终与单位一起使用并作为变量缩放可能是一个好主意。
单位和缩放比例为\“ lbs \”和1.0,或\“ kgs \”和0.45359237,或其他。