我有一个plist中:的setObject多维字典
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>1</key>
<dict>
<key>a</key>
<string>a1</string>
<key>b</key>
<string>b1</string>
</dict>
<key>2</key>
<dict>
<key>a</key>
<string>a2</string>
<key>b</key>
<string>b2</string>
</dict>
<key>3</key>
<dict>
<key>a</key>
<string>a3</string>
<key>b</key>
<string>b3</string>
</dict>
</dict>
</plist>
...这是我从初始化一个可变的字典(见下文)。我可以用一个嵌套的方法调用轻松地引用一个字符串:
NSLog(@"%@", [[plistItems objectForKey:@"1"] objectForKey:@"a"]);
有没有一种方法我可以用一个类似嵌套的方法这个特殊的键做setObect,或做我必须做的越久方式如图所示?
-(void) writeOneItemInADictionary
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Plist3" ofType:@"plist"];
NSMutableDictionary *plistItems = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
//This will return an object for a specific key:
//NSLog(@"%@", [[plistItems objectForKey:@"1"] objectForKey:@"a"]);
NSString *stringTemp = [[NSString alloc] initWithString: @"a1 modified"];
//I want to do something similar with setObject,to modify a1:
//[[plistItems setObject:stringTemp forKey:@"1"]forKey:@"a"]]; //not correct - does not work
//Or do I have to do it this longer way?:
NSMutableDictionary *plistSubItems = [[NSMutableDictionary alloc] init];
plistSubItems = [plistItems objectForKey:@"1"];
[plistSubItems setObject:stringTemp forKey:@"a"];
NSLog(@"plistSubItems: %@", plistSubItems);
NSLog(@"plistItems %@", plistItems); //longer way works fine
}
(不包括内存管理)
我可以用你的建议来改变子字典:[[plistItems objectForKey:@“1”] setObject:stringTemp forKey:@“a”];或[plistItems setValue:stringTemp forKeyPath:@“1.a”];那些都很棒。谢谢!子字典是可变的,只是在我的问题中使用了NSMutableDictionary分配。 – Cephi