2

NSMutableDictionaryの保存に問題があります。NSUserDefaultsに保存してから、青を読み込んで変更してから、もう一度保存しようとしています。

だから私は最初にそれをそのようにします:

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'

4

3 に答える 3

4

objectForKeyは、NSUserDefaultsの不変の値を返します。これを機能させるには、2番目のコードブロックの最初の行を次のように置き換えます。

 NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary: [[NSUserDefaults standardUserDefaults] objectForKey:@"youDict"]];
于 2012-05-05T11:03:37.230 に答える
1

NSUserDefaultsは、可変オブジェクトと不変オブジェクトを区別しないため、元に戻すと不変になります。

可変辞書が必要な場合は、mutableCopyを使用してください。

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

うまくいけば、これはあなたを助けるでしょう...

于 2012-05-05T11:04:04.433 に答える
1

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

 NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary: [[NSUserDefaults standardUserDefaults] ValueForKey:@"youDict"]];
于 2012-05-05T11:10:46.137 に答える