使用KVC从字典中获取属性值

时间:2012-03-22 21:14:54

标签: objective-c nsdictionary key-value-observing key-value-coding

我有十个UIImageViews是我的“GoalsViewController”类游戏的徽章,它们被设置为hidden = YES;在Interface Builder中。

我想让它们隐藏= NO;在我的“GameViewController”类中达到某些级别时。

我被困了,因为我不确定我的解决方案是否会起作用。

到目前为止我所拥有的是:

GoalsVC.h 我有

NSMutableDictionary *goalsDictionary;

和一个返回goalsDictionary

的getter方法
-(NSMutableDictionary *)goalsDictionary;

然后在 GoalsVC.m 中我分配并初始化goalsDictionary

goalsDictionary = [[NSMutableDictionary alloc]initWithCapacity:10];

我创建了一个imageView

UIImageView *goalImage = [[UIImageView alloc]init]; 

goalImage.hidden = YES; 

[goalsDictionary setValue:goalImage forKey:@"PassedLevelOne"];

我重复这个方法再调用九次,将密钥更改为不同级别。

现在,我意识到我无法获得隐藏在字典中的属性吗?方法setValue:接受一个对象,forKey:接受一个字符串。

当我的GameControllerView中的某些内容发生时,是否有更好的方法告诉GoalsViewController将隐藏属性设置为NO?

2 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解你,但这是你在寻找什么?

UIImageView *passedLevelOneImageView = (UIImageView *)[goalsDictionary objectForKey:@"PassedLevelOne"];
passedLevelOneImageView.hidden = NO;

如果不让我知道,我可以再试一次。

答案 1 :(得分:1)

当然,您可以获取对象的属性,该属性是字典中的值。您可以使用valueForKeyPath:方法,如下所示:

id myProperty = [goalsDictionary valueForKeyPath:@"PassedLevelOne.hidden"];

PS。当然,如果属性是BOOL这样的原语,您可以转换结果并相应地赋值。