2012-10-22 26 views
1

我有一個客觀的C方法,它傳遞一個字符串和一個整數作爲它的參數。在這個方法的內部,我想使用一個選擇器 - 其名稱基於我傳入的整數值。例如,如果整數參數是5,我希望選擇器被命名爲「buildXArrayIndex5」,或者如果整數參數是3,我希望選擇器被命名爲「buildXarrayIndex3」。對於如何做到這一點,或者如果可能/合理,我真的很遺憾。我是C新手,所以我寫出了我想要發生的事情,但它不是有效/有效的代碼。但它是這樣的:如何在一個方法內創建一個動態命名的選擇器

- (void) startBuildingXArray:(int)senderID:(NSString *)moveTrackerObject { 

NSString *methodNamePrefix = @"buildXArrayIndex"; 

NSString *realMethodName = [[NSString alloc]initWithFormat:@"%@%d",methodNamePrefix, 
senderID]; 

SEL realSelector = NSSelectorFromString(realMethodName); 

[self realSelector: moveTrackerObject]; 

} 

在接口中,我聲明SEL realSelector;但是我得到一個錯誤,但沒有運行這個說「沒有可見的@interface聲明選擇器realSelector」。但我相信這不是這個代碼的唯一問題。任何人都可以告訴我如何爲此創建適當的代碼或突出更好的方法?

+0

另請參閱[此問題。](http://stackoverflow.com/q/112643/868193) –

+2

你想達到什麼目的?一般來說,當你是編程新手時,沒有必要像這樣做這樣的盛宴,因爲所有事情都可以通過適當的面向對象應用程序設計來完成 –

+0

可能的[如何製作動態命名方法參數?](http:// stackoverflow .com/questions/12992034/how-to-make-a-dynamically-named-method-parameter) –

回答

3

你需要使用-performSelector:方法,如打電話給你的選擇:

[self performSelector:realSelector]; 

此外,如果你需要添加一個冒號的選擇器名稱要調用接受參數的方法:

NSString *realMethodName = [[NSString alloc]initWithFormat:@"%@%d:",methodNamePrefix, senderID]; 

和請撥打電話:

[self performSelector:realSelector withObject:moveTrackerObject]; 
+0

謝謝 - 雖然還有一個問題 - 現在我收到一個錯誤,說「performSelector可能導致泄漏,因爲它的選擇器是未知。」我必須缺少一些東西... – jac300

+0

@ user1697845,檢查這個問題http://stackoverflow.com/questions/11895287/performselector-arc-warning。看來你必須使用pragmas – Vladimir

+0

壓制警告很好,謝謝 – jac300

相關問題