2012-07-12 10 views
5

Ho un programma simile a un puzzle in cui si mettono insieme i blocchi nell'ordine giusto per provare a completare il puzzle. e quando hai finito puoi premere il pulsante play e poi il programma farà fare un piccolo uomo attraverso i tuoi blocchi nei luoghi in cui si trovano i tuoi blocchi. Quindi se hai messo un blocco in alto, un blocco a destra, un blocco in basso, e poi premi il tasto play il programma chiamerebbe quindi chiama i metodi su, vai a destra, muovi verso il basso.puoi memorizzare più metodi in un unico selettore?

Quando il mio programma gira e cerca di capire quali metodi chiamare e in quale ordine, ho bisogno di memorizzare questi metodi in un ordine mentre il programma li trova, in pratica, non posso avere il programma immediatamente chiama i metodi giusto quando capisce quali metodi chiamare, altrimenti il ​​ragazzo che si muove sui blocchi si muoverà fulmineo, voglio immagazzinare i metodi in una sorta di array di metodi (che pensavo sarebbe stato come un selettore di qualche tipo) così che io può chiamare ogni metodo in un certo intervallo di tempo dopo che il mio programma ha capito tutto quello che sta per fare.

mio programma normale in questo momento sembra qualcosa di simile

if(random requirements) 
[self moveUp] 

else if(random requirements) 
[self moveDown] 

else if (random requirements) 
[self moveRight] 

else if(random requirements) 
[self moveLeft] 

bene, avrei preferito questo aspetto simile a questo

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] 

, ovviamente, non si tratta di vera e propria sintassi ma si può tipo di capire cosa sto cercando?

risposta

8

Non è possibile memorizzare più selettori in un solo selettore, ma fare una serie di selettori è una cosa perfettamente valida da fare. Il modo più semplice sarebbe quello di memorizzare le rappresentazioni di stringa dei selettori in un NSMutableArray e creare selettori da stringhe nel codice che itera sull'array.

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 
} 

Un'altra opzione oltre ai selettori sarebbe using blocks. I blocchi sono anche molto efficaci nell'incapsulare le azioni e non è necessario memorizzare il bersaglio separatamente.

+0

Dang, bastonatemi! –

+1

@ownageGuy Non ti preoccupare, accumulerai punti reputazione molto velocemente una volta che inizi a rispondere alle domande. In bocca al lupo! – dasblinkenlight

+2

Potrebbe essere meglio usare 'NSStringFromSelector()' quando si aggiungono inizialmente le stringhe all'array. –

Problemi correlati