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的地方gDictRoot——project0也被修改了。不知道为什么。

4

1 回答 1

2

您看到的行为是由于两者都project0指向project2同一个字典实例。对其中一个的更改将始终反映在另一个上。

如果您不想要这种行为,请project0在制作之前制作一份副本project2

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