基本上我的视图控制器有49个不同的类CircleView
实例变量(称为circleView1
,circleView2
,...,circleView49
)。 CircleView
类是UIImageView
的简单子类,在初始化时基本上会返回圆形图片。
以下是我要做的事情:
在我对视图控制器的实现中,我希望能够使用字符串选择实例变量,例如假设我在1到49之间生成一个随机整数i
,让我们说它是5。希望能够使用类似[NSString stringWithFormat @"circleView%i",i];
的东西构建NSString,并以某种方式到达实际的circleView5实例变量。这可能吗?
P.S。我正在寻找NSClassFromString
行中的某些内容,但它适用于实例变量或对象。
答案 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];
访问所需的圈子。