2012-12-07 88 views
2

我試圖挽救一個的NSMutableDictionary內貨幣匯率的列表在字典NSDecimalNumbers的。在字典中的鍵是貨幣代碼(例如:@「AUD,@」 CAD」等)。該值與轉化率美元NSDecimalNumbers這一切工作正常我先創建字典時(裝載貨幣數據後但是,當我嘗試保存字典並從NSUserDefaults重新加載時,值正確地返回(由字典的NSLog驗證),但是它們是__NSCFNumber而不是NSDecimalNumber。列表保存到NSUserDefaults的

這就是我保存詞典:

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

這是我如何加載:

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

有沒有辦法來保存NSDecimalNumbers的NSUserDefaults的中列出的字典,或是否需要將其保存在一個不同的方式?從NSNumber

+0

爲什麼你叫'[userDefaults同步]'?你幾乎從不需要真正調用它。 –

回答

4
NSDecimalNumber

繼承,這意味着它可以被保存到一個plist中。這一切都很好。當然,在plist中,它幾乎肯定會被表示爲一個浮點數。當讀入plist時,這些值將被反序列化爲NSNumber而不是NSDecimalNumber。這是因爲的plist格式不具有NSDecimalNumber明確支持,因此對待他們就像任何其他NSNumber

您可能想要做的是,不是直接保存字典,而是創建一個字典的副本,用字符串表示法替換每個NSDecimalNumber。然後,當您從NSUserDefaults讀回來時,您可以進行反轉換,將每個字符串轉換回NSDecimalNumber