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