这是一个我知道可以简化的基本示例,但为了测试,我想以这种方式执行此操作。我想根据附加字符串设置变量(变量“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工作),但我仍然相信有一种更简单的方法。
非常感谢您的帮助:)
答案 0 :(得分: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;
}
答案 1 :(得分:2)
您可以这样做的一种方法是在字典中创建相机并使用这些特殊的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];