2012-05-05 15 views
2

NSMutableDictionaryを保存できません。私はそれをNSUserDefaultsに保存しようとしていて、青をロードして変更してからもう一度保存します。設定値NSMutableDictionary?

NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
           firstNameLbl, @"firstName", 
           lastNameLbl, @"lastName", 
           nil]; 
    [[NSUserDefaults standardUserDefaults] setObject:d forKey:@"youDict"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

は、その後、私はそれをロードして試してみて、このような値を変更します:

だから私は、最初はそうのようにそれを作る

NSMutableDictionary *d = [[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"]; 
    [d setObject:textField.text forKey:key]; 
    [[NSUserDefaults standardUserDefaults] setObject:d forKey:@"youDict"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

しかし、このライン、[d setObject:textField.text forKey:key];は、にアプリを引き起こしクラッシュと私はこのエラーを取得する:

'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'

こんにちは、こんにちは。

+0

それはあなたがこのような方法で行うことができないようですが、確かにNSUserDefaultsは不変__NSCFDictionaryを返しますので、あなたが呼び出すときに問題があるかもしれ '[DのsetObjectに:textField.text forKey:キー];'。 – Mat

答えて

4

objectForKeyは、NSUserDefaultsの不変の値を返します。

NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary: [[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"]]; 
1

NSUserDefaultsは、あなたがそれを取り戻すときに、それは不変だろう、可変および不変オブジェクトを区別しません:

この作業はこれで2回目の自分のコードブロックの最初の行を置き換えるようにするにはあなたは可変辞書をしたい場合は、単にmutableCopyを使用します。

NSMutableDictionary *d = [[[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"] mutableCopy]; 

希望、これはあなたを助ける...

+1

誰もが「最初の答えは常に最高です」問題を減らすために、15分の制限を設ける必要があります。 –

+0

確かにあなたに同意します...これは、不要な反復を減らし、スタックオーバーフローのための最善の答えを拾う唯一の方法です。 – Nit

1

私はあなたのために私たちは役に立つだろうと思い、このコードを試してみてください。

NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary: [[NSUserDefaults standardUserDefaults] ValueForKey:@"youDict"]];