objective-c - 保存到 NSUserDefaults 的字典中的 NSDecimalNumbers 列表

标签 objective-c cocoa

我正在尝试在 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 列表的字典,或者我需要以不同的方式保存它?

最佳答案

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

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

关于objective-c - 保存到 NSUserDefaults 的字典中的 NSDecimalNumbers 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13755145/

相关文章:

cocoa - 现成的 Cocoa Spotlight UI 组件

ios - 如何在具有方法的 SOAP Web 服务中传递参数?

ios - ReactiveCocoa subscribeNext 没有检查

iphone - 有没有办法在 APNS 推送消息中包含本地时间和时区

iphone - 我可以使用相同的方法传入不同的 UIViewController 子类吗?

iphone - 如何排除连接2个NSArray?

objective-c - 如何从 IP 地址创建 NSHost 实例?

objective-c - 图像objective-c的尺寸

macos - Cocoa osx NSTableview 改变行高亮颜色

macos - OSX 中的侧边栏图标图像名称