1
// populate 'project' with contents of key in `gDictRoot`
NSDictionary *project = [gDictRoot valueForKeyPath:@"root.project0"];

// modify 'project' as necessary - actual code omitted for brevity
[project setValue:[someDict valueForKey:@"foo"] forKeyPath:@"parameters.foo"];

// add 'project' to 'gDictRoot' so it isn't lost when the view is dismissed
[gDictRoot setValue:project forKeyPath:@"root.project2"];

追加projectした3 行gDictRootproject0も変更されます。理由がわからない。

4

1 に答える 1

2

project0表示される動作は、 と の両方が同じディクショナリ インスタンスをproject2指しているという事実によるものです。それらのいずれかへの変更は、常に他のものに反映されます。

この動作を望まない場合は、作成するproject0前に のコピーを作成してproject2ください。

NSMutableDictionary *project = [NSMutableDictionary
    dictionaryWithDictionary:[gDictRoot valueForKeyPath:@"root.project0"]
];
于 2012-08-13T15:16:16.037 に答える