这是一个我知道可以简化的基本示例,但为了测试目的,我想以这种方式执行此操作。我想根据附加字符串设置一个变量(变量“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;
}
关于objective-c - 使用表示变量名称的字符串来设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680284/