在我的应用程序中,数字显示为磅。我需要添加一个选项来使用公斤。有谁知道该怎么做?我正在使用 Core Data 来存储数字。我知道我可以通过使用if
语句然后进行转换来手动完成所有操作,但必须有更好的方法。
编辑 实际上,我认为我遇到了一个大问题。它不像转换数字那么简单。因为我正在使用选择器并且我想提供国际帝国支持,所以选择器应该以公斤为单位显示完整的、合理的数字。如果我只是将数字转换为公斤,我会得到人们不知道如何使用的十进制数字。有什么建议么?
在我的应用程序中,数字显示为磅。我需要添加一个选项来使用公斤。有谁知道该怎么做?我正在使用 Core Data 来存储数字。我知道我可以通过使用if
语句然后进行转换来手动完成所有操作,但必须有更好的方法。
编辑 实际上,我认为我遇到了一个大问题。它不像转换数字那么简单。因为我正在使用选择器并且我想提供国际帝国支持,所以选择器应该以公斤为单位显示完整的、合理的数字。如果我只是将数字转换为公斤,我会得到人们不知道如何使用的十进制数字。有什么建议么?
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,或其他。