我在NSDictonary
中有一个NSDictonary
的plist,我想知道是否有一种简单的方法可以从子NSDictonary
获取数据。
以下是我的plist的样子:
我想从NSDictonary's
Pistol
,Magnum
和ShotGun
获取数据。
我认为在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
中设置值?
答案 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:消息到最终对象。