保存到NSUserDefaults的字典中的NSDecimalNumbers列表

时间:2012-12-07 00:33:35

标签: 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列表的字典,还是需要以不同的方式保存它?

1 个答案:

答案 0 :(得分:4)

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

您可能想要做的是,不是直接保存字典,而是创建字典的副本,用字符串表示替换每个NSDecimalNumber。然后,当您从NSUserDefaults读回来时,您可以执行逆转换,将每个字符串转换回NSDecimalNumber