gpt4 book ai didi

ios - 我真的需要将我的项目货币转换为 NSDecimalNumber 吗?

转载 作者:行者123 更新时间:2023-11-29 01:36:36 25 4
gpt4 key购买 nike

是的,我知道我应该使用NSDecimalNumber 来处理货币、金钱、价格... I've read this.问题是,我改编了一个现有的项目,它使用 NSStringNSNumber (float, double, CGFloat...) 作为货币。他们通过使用 NSNumberFormatter 来处理 float ,正如我所看到的,这不是一个大问题(现在?)。这些货币存储在 coredata 中。

现在,如果我想将所有这些货币转换为 NSDecimalNumber,我将不得不对代码进行大量重构并迁移到 coredata 中。那么问题来了:

  1. If (I assume) double, CGFloat, NSNumber can hold the value as large as NSDecimalNumber, why should I use NSDecimalNumber since I can use other with NSNumberFormatter? Is it because of performance?

  2. In case of the necessary of the converting, can I do an auto migration with the help of MappingModel only, of course), or do I have to adapt a custom migration policy?

因为核心数据同时使用 NSStringNSNumber 作为货币,所以请帮我找到一个从这两种数据类型迁移的解决方案。我不习惯在 coredata 中使用 NSDecimalNumber。提前致谢。

编辑

好的,我知道 NSDecimalNumber 是必需的。请帮我回答第二个问题:我可以使用 mappingModel + FUNCTION($source.price, "decimalValue") 之类的东西进行自动迁移吗(这是不正确的,因为 decimalValue 返回 NSDecimal,而不是 NSDecimalNumber)。我真的必须编写自定义迁移策略吗?

最佳答案

Do I really have to write a custom migration policy?

是的。为每个需要转换的实体创建一个 NSEntityMigrationPolicy 的子类,并实现 createDestinationInstancesForSourceInstance:entityMapping:manager:error: 方法。在映射模型中实体的自定义策略中输入此类的名称。

- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance
entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager
error:(NSError **)error
{
BOOL aBool = [super createDestinationInstancesForSourceInstance:sInstance entityMapping:mapping manager:manager error:error];
if (aBool)
{
NSArray *aSourceArray = [[NSArray alloc] initWithObjects:&sInstance count:1];
NSArray *aDestArray = [manager destinationInstancesForEntityMappingNamed:[mapping name] sourceInstances:aSourceArray];
if (aDestArray && [aDestArray count] > 0)
{
NSManagedObject *dInstance = [aDestArray objectAtIndex:0];
// conversion
}
}
return aBool;
}

关于ios - 我真的需要将我的项目货币转换为 NSDecimalNumber 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com