【问题标题】:List of NSDecimalNumbers in a dictionary saved to NSUserDefaults保存到 NSUserDefaults 的字典中的 NSDecimalNumbers 列表
【发布时间】:2012-12-07 00:33:34
【问题描述】:

我正在尝试将货币汇率列表保存在 NSMutableDictionary 中。字典的键是货币代码(例如:@"AUD、@"CAD" 等)值是 NSDecimalNumbers 和美元的兑换率。当我第一次创建字典时(加载货币数据后),这一切都很好来自网络服务)。但是,当我尝试保存字典并从 NSUserDefaults 重新加载它时,值会正确返回(由字典的 NSLog 验证)但它们是 __NSCFNumber 而不是 NSDecimalNumber。

这就是我保存字典的方式:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.exchangeRatesDict forKey:kExchangeRateDictDefaultsKey];
[userDefaults synchronize];

这是我加载它的方式:

self.exchangeRatesDict = [[userDefaults objectForKey:kExchangeRateDictDefaultsKey] mutableCopy];

有没有办法用 NSUserDefaults 中的 NSDecimalNumbers 列表保存字典,还是我需要以不同的方式保存它?

【问题讨论】:

  • 你为什么打电话给[userDefaults synchronize]?你几乎不需要真正调用它。

标签: objective-c cocoa


【解决方案1】:

NSDecimalNumber 继承自 NSNumber,这意味着它可以保存到 plist。这一切都很好。当然,在 plist 中,它几乎肯定会被表示为一个浮点数。当重新读入 plist 时,这些值将被反序列化为 NSNumbers 而不是 NSDecimalNumber。这是因为 plist 格式没有明确支持 NSDecimalNumber,所以它像对待任何其他 NSNumber 一样对待它们。

您可能想要做的是,而不是直接保存您的字典,而是创建字典的副本,将每个 NSDecimalNumber 替换为其字符串表示形式。然后,当您从 NSUserDefaults 读回它时,您可以进行反向翻译,将每个字符串转换回 NSDecimalNumber

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多