Objective c 可能使用核心数据将磅转换为千克

Objective c 可能使用核心数据将磅转换为千克,objective-c,ios,cocoa-touch,core-data,unit-conversion,Objective C,Ios,Cocoa Touch,Core Data,Unit Conversion,在我的应用程序中,数字显示为磅。我需要添加一个选项来使用公斤。有人知道怎么做吗?我用核心数据来存储数字。我知道我可以通过使用if语句来手动完成这一切,然后进行转换,但肯定有更好的方法 编辑 事实上,我想我遇到了一个大问题。它不像转换数字那么简单。因为我使用的是选择器,我想提供国际帝国支持,所以选择器应该以kg为单位显示完整、合理的数字。如果我把数字转换成kg,我会得到人们不知道如何使用的十进制数字。有什么建议吗?有很多方法可以做到这一点 我不得不对你的应用程序做一些假设,但如果你想选择(全局)从

在我的应用程序中,数字显示为磅。我需要添加一个选项来使用公斤。有人知道怎么做吗?我用核心数据来存储数字。我知道我可以通过使用
if
语句来手动完成这一切,然后进行转换,但肯定有更好的方法

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

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

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


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

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

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


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

最好将其编码为始终使用单位和缩放作为变量


单位和比例应为“lbs”和1.0,或“kgs”和0.45359237,或其他任何单位。

最好将其编码为始终使用单位和比例作为变量


单位和缩放比例应为“磅”和1.0,或“千克”和0.45359237,或其他任何单位。

我建议使用自定义NSFormatter将数字转换为字符串以供显示。您将始终以一种格式存储数据,同时提供以任何格式显示数据的功能。您需要一个简单的设置(通过存储)来告诉格式化程序使用什么格式。这样做的一些好处是,您只需在显示数字时处理这个问题。由于您已经必须将数字转换为字符串来显示它们,因此代码中几乎没有更改。此外,您根本不需要更改核心数据存储,因为设置存储在应用程序的首选项中。您甚至可以将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"];
}

有关自定义格式化程序的更多信息,请参阅。

我建议使用自定义NSFormatter将数字转换为字符串以供显示。您将始终以一种格式存储数据,同时提供以任何格式显示数据的功能。您需要一个简单的设置(通过存储)来告诉格式化程序使用什么格式。这样做的一些好处是,您只需在显示数字时处理这个问题。由于您已经必须将数字转换为字符串来显示它们,因此代码中几乎没有更改。此外,您根本不需要更改核心数据存储,因为设置存储在应用程序的首选项中。您甚至可以将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"];
}
有关自定义格式化程序的详细信息,请参阅。

非常简单。


非常简单。

+1将自定义格式设置器放置在使用它的NSManagedObject子类的类方法中是一个很好的地方。然后,您总是可以在任何可能使用它的地方轻松地使用格式化程序。+1将自定义格式化程序存放在使用它的NSManagedObject子类的类方法中是一个好地方。然后,无论您在何处使用格式化程序,都可以轻松地将其放在手边。