我正在尝试在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列表的字典,还是需要以不同的方式保存它?
答案 0 :(得分:4)
NSDecimalNumber
继承自NSNumber
,这意味着它可以保存为plist。这一切都很好。当然,在plist中,它几乎肯定会被表示为浮点数。当重新阅读plist时,这些值将被反序列化为NSNumber
s而不是NSDecimalNumber
。这是因为plist格式没有明确支持NSDecimalNumber
,所以它就像对待任何其他NSNumber
一样对待它们。
您可能想要做的是,不是直接保存字典,而是创建字典的副本,用字符串表示替换每个NSDecimalNumber
。然后,当您从NSUserDefaults
读回来时,您可以执行逆转换,将每个字符串转换回NSDecimalNumber
。