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

| 我知道这是一个可以简化的基本示例,但是为了测试起见,我想以此方式进行操作。我想根据附加字符串设置一个变量(该类中已经声明了变量\“ 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];
    

要回复问题请先登录注册