【问题标题】:Convert from pounds to kilograms, possibly using Core Data从磅转换为公斤,可能使用核心数据
【发布时间】:2011-06-09 22:30:40
【问题描述】:

在我的应用中,数字显示为磅。我需要添加一个选项来使用公斤。有谁知道该怎么做?我正在使用 Core Data 来存储数字。我知道我可以通过使用if 语句然后进行转换来手动完成所有操作,但必须有更好的方法。

编辑 实际上,我认为我遇到了一个大问题。它不像转换数字那么简单。因为我正在使用选择器并且我想提供国际帝国支持,所以选择器应该以公斤为单位显示完整的、合理的数字。如果我只是将数字转换为公斤,我会得到人们不知道如何使用的十进制数字。有什么建议吗?

【问题讨论】:

    标签: objective-c ios cocoa-touch core-data unit-conversion


    【解决方案1】:

    https://github.com/davedelong/DDUnitConverter

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

    很简单。

    【讨论】:

      【解决方案2】:

      我建议使用自定义 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

      【讨论】:

      • +1 放置自定义格式化程序的好地方是在使用它的 NSManagedObject 子类的类方法中。这样,您就可以在任何可能使用它的地方轻松使用格式化程序。
      【解决方案3】:

      有很多方法可以做到这一点。

      我必须对您的应用程序做出一些假设,但如果您想选择(全局)从 lbs 更改为 kgs,那么我可能会在您的应用程序中有一个设置对话框,以便用户可以坚持他们的决定以 lbs 或 kgs 为单位查看内容,然后我会将其保留在您的应用程序的设置中,并将此设置用作您的应用程序初始化的一部分。然后,无论您显示 lbs 或 kgs 的值,您只需要检查用户定义的设置并相应地调整值(可能还有应用程序中的任何标签),这就像检查代码一样简单从核心日期检索值

      检查设置将其保存为全局可访问的状态;这可能是您的应用程序委托中的成员,一个包含设置的单例,或者只是在您需要检查的地方请求设置。然后,在访问 lbs 数据的代码中,检查设置,如果设置为 kg,则进行计算并将其从数据访问代码返回到视图。

      【讨论】:

        【解决方案4】:

        将其编码为始终使用单位和缩放作为变量可能是个好主意。

        单位和比例可以是“lbs”和 1.0,或“kgs”和 0.45359237,或其他。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          • 2019-06-22
          • 2018-07-30
          • 1970-01-01
          • 2014-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多