2011-08-08 7 views
1

ユーザーが自分のiPhoneアプリケーションからサインインすると、NSUserDefaultsに一連のデフォルト要素が作成されます。これらのうちの1つはNSMutableArrayで、次のように追加します:NSUserDefaultsに格納されているNSMutableArrayはデータを保存しません

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *theArray = [NSMutableArray array]; 
[prefs setObject:theArray forKey:@"theArray"]; 

これは完璧に機能します。しかし、theArrayから値を挿入または取得する場合、何かが間違っています。

2011-08-08 18:35:17.503 MyApp[7993:10d03] (
) 

:私は、コードが実行されたコンソールで、「これが値である」が、代わりに私はこれを見ることを期待する

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[[prefs objectForKey:@"theArray"] setValue:@"This is a value" forKey:@"aValue"]; 
NSLog(@"%@", [[prefs objectForKey:@"theArray"] valueForKey:@"aValue"]); 

:ここに私のアプリでは、別のファイルからの抜粋ですどのように配列は空ですか?私は同じ結果を持つNSArrayを使用して同じことを試みました。

+0

NSUserDefaultsに加えられた変更を同期することを忘れないでください。参照:http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUserDefaults/synchronize –

+0

ありがとう、Wolfgang。しかし、問題は続く。 – wstr

答えて

10

NSUserDefaultsに変更可能なオブジェクトを保存すると、そのオブジェクトの不変なコピーが保存されるので、そのように直接変更することはできません。変更可能なコピーをデフォルトから取り出し、変更して元のオブジェクトをデフォルトに置き換えて元に戻す必要があります。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *mutableArrayCopy = [[prefs objectForKey:@"theArray"] mutableCopy]; 
[mutableArrayCopy addObject:@"some new value"]; 
[prefs setObject:mutableArrayCopy forKey:@"theArray"]; 
[mutableArrayCopy release]; 
+0

提案したように(行3を 'addValue:forKey:' addObject'の代わりに 'setValue:forKey:'に置き換えても)、私はまだ空の配列を取得します。 – wstr

+4

NSMutableArrayで 'setValue:forKey:'を実行することはできません。そのためにはNSMutableDictionaryが必要です。そのため、上記のコードで 'addObject:'に変更しました。 –

+0

ええ、そうです。 NSMutableArrayを代わりにNSMutableDictionaryに置き換えただけで、すべてが美しく動作するようです。ありがとう! – wstr

0

にNSArray * savedArray = [NSArrayのarrayWithObjects: "OBJ1" @、 "OBJ2"、 "OBJ3" @、ゼロ@]。
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:savedArray forKey:@ "key_for_savedArray"];
[userDefaults synchronize];

//アレイの使用を取得するには:

NSArray * retrivedArray = [userDefaults objectForKey:@ "key_for_savedArray"];

関連する問題