2014-02-09 97 views
-1

我有一些NSString全局變量。如何設置一個全局變量取決於參數?

我可以將它們像:

[[Globals sharedInstance] setColor1:@"red"]; 
[[Globals sharedInstance] setColor2:@"orange"]; 

但我在一個功能,與誰代表數字1,2,3參數等 我怎麼能這樣做呢?

[[Globals sharedInstance] setColorMYPARAMETER:@"orange"]; 
+0

我很確定這是不可能的。但你可以嘗試另一種方法 – Zhans

回答

1

您可以構建使用NSSelectorFromString基於動態方法名稱的選擇,:

int colorNum = ... ; 
NSString * colorSelStr = [NSString stringWithFormat:@"setColor%d:", colorNum]; 
[[Globals sharedInstance] performSelector:NSSelectorFromString(colorSelStr) withObject:@"orange"]; 

這將創建一個字符串,它看起來像你想的方法名,然後你問將共享的全局對象與來自該字符串的SEL的「performSelector」相關聯,並將顏色字符串作爲參數。


但是,這可能表明您可以設計更好的原始代碼。爲什麼你有全局變量編號爲0-n?爲什麼不保留所有全局顏色的NSArray,然後通過索引訪問它?

+0

忘了冒號的setColor串後 – santhu

+0

看起來不錯,但我有一個警告,perfomSelector可能會導致泄漏,因爲它的選擇是不明的,我想這並不重要 –

+0

「NSInvalidArgumentException」的,理由是:「 - [全局setColor3]:發送給實例的無法識別的選擇器。 STANGE因爲我的全局變量的NSString * COLOR3確實存在 –

0
SEL mySel =NSSelectorFromString([NSString stringWithFormat:@"setColor%d:",num]); 
[[Globals sharedInstance] performSelector:mySel withObject:@"color"];