从Objective-C中的字符串调用属性/实例变量

时间:2011-07-06 22:40:45

标签: iphone

基本上我的视图控制器有49个不同的类CircleView实例变量(称为circleView1circleView2,...,circleView49)。 CircleView类是UIImageView的简单子类,在初始化时基本上会返回圆形图片。

以下是我要做的事情:

在我对视图控制器的实现中,我希望能够使用字符串选择实例变量,例如假设我在1到49之间生成一个随机整数i,让我们说它是5。希望能够使用类似[NSString stringWithFormat @"circleView%i",i];的东西构建NSString,并以某种方式到达实际的circleView5实例变量。这可能吗?

P.S。我正在寻找NSClassFromString行中的某些内容,但它适用于实例变量或对象。

2 个答案:

答案 0 :(得分:5)

KVC是你的朋友。假设你有一个包含circleView名称的字符串,

NSString *myCircle = [NSString stringWithFormat:@"circleView%i", i];

使用KVC访问控制器上的该属性:

CircleView *theCircle = [self valueForKey:myCircle];

另一方面,您应该考虑重新设计对象层次结构;这将是非常难以维护的,并且肯定有更好的方法(通过索引访问CircleView的数组将是我的首选)。

答案 1 :(得分:3)

使用数组(原始C数组或NSArray:我将使用NSMutableArray演示),而不是拥有一堆变量并尝试通过字符串访问它们。在您的类中声明NSMutableArray *circleViews;就像执行circleViewN实例一样。在初始值设定项中,您可以使用以下内容代替circleViewN = [[CircleView alloc] init];

circleViews = [NSMutableArray arrayWithCapacity:50];

for(int i=0; i<50; i++)
    [circleViews addObject:[[[CircleView alloc] init] autorelease]];

然后,您可以使用随机的i [circleViews objectAtIndex:i];访问所需的圈子。