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