2012-07-12 55 views
5

我有一個像你把塊一起,以正確的順序嘗試完成拼圖程序的謎。當你完成後,你可以點擊播放按鈕,然後程序會讓一個小男人在你的街區的地方走過你的街區。所以,如果你放在一塊了,一個塊吧,一個擋了下來,然後點擊播放程序將調用然後調用的方法向上移動,向右移動,下移。你可以在一個選擇器中存儲多個方法嗎?

當我的程序運行並試圖找出調用什麼方法和按什麼順序時,我需要按程序找到它們的順序存儲這些方法,基本上,我不能讓程序立即調用方法權當它計算出什麼方法來調用,否則傢伙移動的塊將移動快如閃電,我想存儲在某種方法陣列的方法(我以爲會像某種形式的選擇),這樣我可以在我的程序計算完所有要做的事情之後的某個時間間隔內調用每種方法。

我的正常程序,現在看起來是這樣的

if(random requirements) 
[self moveUp] 

else if(random requirements) 
[self moveDown] 

else if (random requirements) 
[self moveRight] 

else if(random requirements) 
[self moveLeft] 

好,我寧願這是這個樣子

if(random requirements) 
SEL selector addMethod:[self moveUp] 

else if(random requirements) 
SEL selector addMethod:[self moveDown] 

else if (random requirements) 
SEL selector addMethod:[self moveRight] 

else if(random requirements) 
SEL selector addMethod:[self moveLeft] 

顯然這不是真正的語法,但可你有種理解我在找什麼?

回答

8

不能多個選擇存儲在一個選擇,但做選擇的數組是做一個完全有效的事情。最簡單的方法是將你選擇的字符串表示存儲在一個NSMutableArray,並在代碼陣列上迭代創建的字符串選擇。

NSMutableArray *selectorNames = [NSMutableArray array]; 
if(random requirements) 
    [selectorNames addObject:NSStringFromSelector(@selector(moveUp))]; 
if(random requirements) 
    [selectorNames addObject:NSStringFromSelector(@selector(moveDown))]; 
... 
for (NSString *selectorName in selectorNames) { 
    SEL nextSelector = NSSelectorFromString (selectorName); 
    // Now you can invoke your selector 
} 

除選擇器之外的另一個選項是using blocks。塊也非常擅長封裝動作,而且不需要單獨存儲目標。

+0

黨,打我吧! – 2012-07-12 17:36:40

+1

@ownageGuy不用擔心,一旦你開始回答問題,你就會很快積累聲譽積分。祝你好運! – dasblinkenlight 2012-07-12 17:51:55

+2

最初在將數組添加到數組時最好使用'NSStringFromSelector()'。 – 2012-07-12 17:54:33

相關問題