2011-04-15 101 views
2

這是一個我知道可以簡化的基本示例,但出於測試目的,我希望以這種方式執行此操作。我想根據附加字符串設置一個變量(變量「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工作)的唯一途徑,但我仍然相信,是一種更簡單的方法。

非常感謝你的幫助:)你可以做到這將是一本字典,以創建您的相機和使用這些特殊NSString的中鍵將其

+0

什麼是實例變量凸輪和POS在頭文件中的@property行。 – 2011-04-15 18:02:38

+1

您是否知道[[NSString alloc] initWithString:@「cam」]與@「cam」完全相同? – hooleyhoop 2011-04-16 08:57:04

回答

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; 
} 
2

的一種方式。像,

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]; 
+0

這將是有道理的!我很習慣使用.. vars()[string] = someValue ..在python中設置需要在迭代中定義的變量。再次感謝!! – johntraver 2011-04-15 19:23:03

+0

沒問題,如果它解決了你的需要,請記得接受爲正確的答案。歡迎來到SO – Nektarios 2011-04-18 12:48:58