2

NSMutableDictionary 内に為替レートのリストを保存しようとしています。ディクショナリのキーは通貨コード (例: @"AUD、@"CAD" など) です。値は NSDecimalNumbers であり、米ドルへの換算レートです。最初にディクショナリを作成するとき (通貨データを読み込んだ後)、これはすべて正常に機能します。ただし、辞書を保存して NSUserDefaults から再読み込みしようとすると、値は正しく返されます (辞書の NSLog によって検証されます) が、NSDecimalNumber ではなく __NSCFNumber です。

これは私が辞書を保存する方法です:

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

これは私がそれをロードする方法です:

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

NSUserDefaults に NSDecimalNumbers のリストを含む辞書を保存する方法はありますか、それとも別の方法で保存する必要がありますか?

4

1 に答える 1

4

NSDecimalNumberから継承しNSNumberます。つまり、plist に保存できます。それはすべて順調です。もちろん、plist では、ほぼ確実に浮動小数点数として表されます。また、plist を読み込むと、これらの値はNSNumberではなく sとして逆シリアル化されNSDecimalNumberます。これは、plist 形式が を明示的にサポートしていないためです。NSDecimalNumberそのため、他の と同じように扱われますNSNumber

おそらくやりたいことは、辞書を直接保存する代わりに、それぞれNSDecimalNumberをその文字列表現に置き換える辞書のコピーを作成することです。次に、から読み戻すとNSUserDefaults、逆変換を実行して、各文字列を . に戻すことができますNSDecimalNumber

于 2012-12-07T00:38:44.463 に答える