如何从属性列表中的NSDictionary中的NSDictionary获取数据?

时间:2013-08-30 13:45:25

标签: ios struct nsdictionary property-list

我在NSDictonary中有一个NSDictonary的plist,我想知道是否有一种简单的方法可以从子NSDictonary获取数据。

以下是我的plist的样子: my plist

我想从NSDictonary's PistolMagnumShotGun获取数据。

我认为在NSDictonary中会有一个像dictonaryForKey这样的方法,但是没有一个方法,我似乎找不到类似的东西。

NSString *plistURL = [[NSBundle mainBundle] pathForResource:@"Guns" ofType:@"plist"];
NSDictionary *guns = [[NSDictionary alloc] initWithContentsOfFile:plistURL];
NSArray *array = [dict allValues];
NSDictionary *pistol = [[NSDictionary alloc] initWithDictionary:array[0]];
NSNumber *number = [newDict valueForKey:@"Damage"];

或者有没有办法在struct中设置值?

2 个答案:

答案 0 :(得分:1)

我认为你为自己复杂化了。尝试以下代码,它会创建您的初始字典,然后通过其键值直接访问子字典。

NSString *plistURL = [[NSBundle mainBundle] pathForResource:@"Guns" ofType:@"plist"];
NSDictionary *guns = [[NSDictionary alloc] initWithContentsOfFile:plistURL];

NSDictionary *pistol = guns[@"Pistol"];
NSNumber *number = pistol[@"Damage"];

注意:最后两行使用现代Objective C语法。

答案 1 :(得分:1)

使用键值编码:

NSString *plistURL = [[NSBundle mainBundle] pathForResource:@"Guns" ofType:@"plist"];
NSDictionary *guns = [[NSDictionary alloc] initWithContentsOfFile:plistURL];
NSDictionary *pistol = [guns valueForKeyPath:@"Pistol"];

或者如果你想直接受到伤害:

NSNumber *damage = [guns valueForKeyPath:@"Pistol.Damage"];

来自文档:

- (id)valueForKeyPath:(NSString *)keyPath
  

返回给定键标识的派生属性的值   路径。默认实现获取每个的目标对象   使用valueForKey的关系:并返回a的结果   valueForKey:消息到最终对象。