使用表示变量名称的字符串来设置变量
这是一个我知道可以简化的基本示例,但出于测试目的,我希望以这种方式执行此操作。我想根据附加字符串设置一个变量(变量“cam0”和“pos1”已经在类中声明)。追加的字符串本质上是一个索引,并且我将循环遍历一个循环来将摄像机(cam0,cam1 ..)分配到不同的位置(pos0,pos1 ..)。使用表示变量名称的字符串来设置变量
CAM0被定义为的UIImageView
POS1被定义为一个的CGRect
这个工程名为coverIndex一个的NSString变量:
NSString* text = [[NSString alloc] initWithString:@""];
NSLog(@"%@",(NSString *)[self performSelector:NSSelectorFromString([text stringByAppendingString:@"coverIndex"])]);
,我为coverIndex设置正确的字符串被记录到安慰。
现在回到我的UIImageView和CGRect。我希望这个工作。
NSString* camText = [[NSString alloc] initWithString:@"cam"];
NSString* posText = [[NSString alloc] initWithString:@"pos"];
[(UIImageView *)[self performSelector:NSSelectorFromString([camText stringByAppendingString:@"0"])] setFrame:(CGRect)[self performSelector:NSSelectorFromString([posText stringByAppendingString:@"1"])]];
我的错误是“转换为要求的非标型”
这是我发现做这样的事情(和得到的NSLog工作)的唯一途径,但我仍然相信,是一种更简单的方法。
非常感谢你的帮助:)你可以做到这将是一本字典,以创建您的相机和使用这些特殊NSString的中键将其
使用KVC,这是一个惊人的技术产品,这将只是你想要什么:
for (int index = 0; index < LIMIT; index++) {
NSString *posName = [NSString stringWithFormat:@"pos%d", index];
CGRect pos = [[self valueForKey:posName] CGRectValue];
NSString *camName = [NSString stringWithFormat:@"cam%d", index];
UIImageView *cam = [self valueForKey:camName];
cam.frame = pos;
}
的一种方式。像,
NSMutableDictionary *myCams;
myCams = [[myCams alloc] init];
[myCams addObject:YOUR_CAM0_OBJECT_HERE forKey:@"cam[0]"];
[myCams addObject:YOUR_CAM1_OBJECT_HERE forKey:@"cam[1]"];
NSString camString = @"cam[0]"; // you'd build your string here like you do now
id theCamYouWant = [myCams objectForKey:camString];
这将是有道理的!我很习惯使用.. vars()[string] = someValue ..在python中设置需要在迭代中定义的变量。再次感谢!! – johntraver 2011-04-15 19:23:03
没问题,如果它解决了你的需要,请记得接受为正确的答案。欢迎来到SO – Nektarios 2011-04-18 12:48:58
什么是实例变量凸轮和POS在头文件中的@property行。 – 2011-04-15 18:02:38
您是否知道[[NSString alloc] initWithString:@“cam”]与@“cam”完全相同? – hooleyhoop 2011-04-16 08:57:04