2011-04-15 100 views
2

这是一个我知道可以简化的基本示例,但出于测试目的,我希望以这种方式执行此操作。我想根据附加字符串设置一个变量(变量“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的中键将其

+0

什么是实例变量凸轮和POS在头文件中的@property行。 – 2011-04-15 18:02:38

+1

您是否知道[[NSString alloc] initWithString:@“cam”]与@“cam”完全相同? – hooleyhoop 2011-04-16 08:57:04

回答

4

使用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; 
} 
2

的一种方式。像,

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]; 
+0

这将是有道理的!我很习惯使用.. vars()[string] = someValue ..在python中设置需要在迭代中定义的变量。再次感谢!! – johntraver 2011-04-15 19:23:03

+0

没问题,如果它解决了你的需要,请记得接受为正确的答案。欢迎来到SO – Nektarios 2011-04-18 12:48:58