使用代表变量名的字符串设置变量

问题描述

| 我知道这是一个可以简化的基本示例,但是为了测试起见,我想以此方式进行操作。我想根据附加字符串设置一个变量(该类中已经声明了变量\“ 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正常工作)的唯一方法,但我仍然相信有一种更简单的方法。 非常感谢您的帮助:)     

解决方法

使用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;
}
    ,做到这一点的一种方法是在字典中创建相机,然后使用那些特殊的NSStrings键入它。喜欢,
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];
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...