2012-03-30 18 views
40

私はNSMutableDictionaryを持っており、値を追加しました(いくつかのキーのペア値)。今私はこのNSMutableDictionaryをNSUserDefaultsオブジェクトに保存する必要があります。NSDictionaryをNSUserDefaultsに保存する

1.)私のコードは以下の通りです。私はそれが正しいと私はNSUSutableDictionaryからNSMutableDictionaryを取得する方法を知る必要があるかどうかわからないのですか?

2.)NSMutableDictionaryを取得した後、それをNSDictionaryに保存する必要があります。どうすればこれらをすることができますか?

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 

[dic addObject:@"sss" forKey:@"hi"]; 
[dic addObject:@"eee" forKey:@"hr"]; 

[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"]; 
[[NSUserDefaults standardDefaults] synchronize]; 
+5

保存するには '[[NSUserDefaults] synchronize];'も呼び出す必要があります。あなたは正確に何を苦労していますか?あなたはあなたがしたいことを言いましたが、どこに問題があるのか​​は言及していません。上にインクルードしたコード( '[')が見つからないことは別として)はうまくいきます。 – Sam

+0

いくつかのキーと値のペアを保存し、別のビューからアクセスする必要があります。だから私はこれとNSDictionary NSUserDefaultsを使用すると思った。最後に、私はこれらの値をテーブルに移入する必要があります。 – shajem

+0

詳細を追加しない限り、より多くの回答を得ることはできません。あなたは物事をうまく設定しています。あなたは '[[[NSUserDefaults standardDefaults] objectForKey:@" DicKey "]'を呼び出すときに辞書を見つけられませんか?これは 'NSDictionary *'型であり、 'NSMutableDictionary * '型ではないことに注意してください。ビュー間でデータを操作する場合は、両方のビューに渡すデータモデルにデータを格納することを検討してください(または、データの表示方法に応じてシングルトンアクセサを提供する)。 – Sam

答えて

74

あなたのコードが正しいですが、あなたが心に留めておく必要があり一つのことは、NSUserDefaultsが可変と不変オブジェクトを区別しないということですので、あなたはそれを取り戻すとき、それは不変だろう:

NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DicKey"]; 

あなたは可変辞書をしたい場合は、単にmutableCopyを使用します。

NSMutableDictionary *mutableRetrievedDictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"DicKey"] mutableCopy]; 
+0

'copy'を使ってオブジェクトを保持しているので、あなたは所有者になり、あなたはそれを解放する責任があります。 – Saphrosit

+22

メモリを手動で管理するのはそうです。 – yuji

+2

私はARCを使用しています。そして、NSMutableDictionaryをNSUser Defaultsに保存し、NSUserDefaultsからNSDictionaryを取得する必要があります。だから私はあなたの1番目のアプローチを使用する必要がありますか? – shajem

5
NSMutableDictionary *profileDictionary = [[NSMutableDictionary alloc] init]; 
[profileDictionary setObject:txt_Username.text forKey:@"USERNAME_KEY"]; 
[profileDictionary setObject:txt_Password forKey:@"PASSWORD_KEY"]; 
[[NSUserDefaults standardUserDefaults] setObject:profileDictionary forKey:@"PROFILE_KEY"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

これはあなたが期待したものです。

関連する問題