2012-07-12 10 views
5

Mam program podobny do łamigłówek, w którym układa się klocki w odpowiedniej kolejności, aby spróbować ukończyć zagadkę. a kiedy skończysz, możesz nacisnąć przycisk odtwarzania, a program sprawi, że mały człowiek przejdzie przez twoje bloki w miejscach, gdzie są twoje bloki. Więc jeśli umieścisz jeden blok w górę, jeden blok w prawo, jeden blok w dół, a następnie wciśnij przycisk, program zadzwoni, a następnie wywołaj metody w górę, w prawo, w dół.możesz przechowywać wiele metod w jednym selektorze?

Kiedy mój program działa i próbuje dowiedzieć się, jakie metody wywoływania iw jakiej kolejności, muszę przechowywać te metody w kolejności, w jakiej program je znajduje, w zasadzie, nie mogę pozwolić programowi natychmiast wywołać metody kiedy oblicza, jakie metody wywoływania, lub facet poruszający się na blokach szybko poruszałby się błyskawicznie, chcę przechowywać metody w jakiejś tablicy metod (która uważam, że byłaby jak jakiś selektor), więc można wywołać każdą z metod w określonym przedziale czasowym po tym, jak mój program zorientuje się, co zamierza zrobić.

mój normalny program teraz wyglądać tak

if(random requirements) 
[self moveUp] 

else if(random requirements) 
[self moveDown] 

else if (random requirements) 
[self moveRight] 

else if(random requirements) 
[self moveLeft] 

dobrze, wolałbym to wyglądać mniej więcej tak

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] 

oczywiście to nie jest prawdziwa składnia ale można trochę zrozumieć czego szukam?

Odpowiedz

8

Nie można przechowywać wielu selektorów w jednym selektorze, ale tworzenie tablicy selektorów jest całkowicie poprawną czynnością. Najprostszym sposobem byłoby przechowywanie reprezentacji ciągów selektorów w kodzie NSMutableArray i tworzenie selektorów z łańcuchów w kodzie, który iteruje po tablicy.

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 
} 

Inne opcje oprócz selektorów to using blocks. Bloki są również bardzo dobre w akcjach enkapsulacji, a Ty nie musisz przechowywać ich celu oddzielnie.

+0

Dang, pokonaj mnie! –

+1

@guageGuy Nie przejmuj się, szybko zbierzesz punkty reputacji, gdy zaczniesz odpowiadać na pytania. Powodzenia! – dasblinkenlight

+2

Może być lepiej użyć 'NSStringFromSelector()' podczas dodawania ciągów do tablicy początkowo. –

Powiązane problemy