2012-07-12 34 views
5

Bulmacayı denemek ve tamamlamak için doğru sırayla bloklar yerleştirdiğiniz bir program gibi bir bulmaca var. ve işiniz bittiğinde, play butonuna basabilir ve daha sonra program, bloklarınızın bulunduğu yerlerden küçük bir adamın bloklarınızda yürümesini sağlayacaktır. Yani bir blok yerleştirdiyseniz, bir blok sağa, bir blok aşağıya ve daha sonra programa çalarak çalmaya devam eder, daha sonra metotları çağır, yukarı doğru hareket ettir, aşağı doğru hareket et.Tek seçicide birden fazla yöntem saklayabilir misiniz?

Programım çalıştığımda ve hangi yöntemde arama yapılacağını ve hangi sırayla çalıştığını belirlediğinde, bu yöntemleri programın bulunduğu sırada sırayla depolamam gerekiyor, temel olarak, programı hemen kullanamayacağım yöntemleri hemen Ne zaman çağırmak için hangi yöntemleri çağırmak ya da bloklar üzerinde hareket eden adam yıldırım hızlı hareket edeceğini anladığımda, ben (ben bir çeşit seçici gibi olacağını düşündüm) bir yöntem dizisi yöntemleri saklamak istiyorum Programım herşeyin yapacağı her şeyi anlamasından sonra belirli bir zaman aralığında her yöntemi arayabilir.

benim normal programı şu anda ben doğrusu bu gerçek sözdizimi değil açıkçası bu

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] 

gibi bir şey ama biraz anlamaya can olur, iyi bu

if(random requirements) 
[self moveUp] 

else if(random requirements) 
[self moveDown] 

else if (random requirements) 
[self moveRight] 

else if(random requirements) 
[self moveLeft] 

gibi görünür ne için bakıyorum?

cevap

8

Tek bir seçicide birden çok seçici saklayamazsınız, ancak seçici bir dizi yapmak yapmak için kesinlikle geçerli bir şeydir. En basit yol, seçicilerinizin dize ile temsillerini bir NSMutableArray içerisinde saklamak ve dizide yinelenen koddaki dizelerden seçiciler oluşturmak olacaktır.

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 
} 

Seçiciler dışında başka bir seçenek de using blocks olacaktır. Bloklar da eylemleri kapsüllemekte çok iyidir ve hedeflerini ayrı ayrı depolamanız gerekmez.

+0

Dang, bana onu döv! –

+1

@ownageGuy Endişelenmeyin, soruları yanıtlamaya başladığınızda itibar puanlarınızı çok hızlı bir şekilde toplarsınız. İyi şanslar! – dasblinkenlight

+2

Dizeleri ilk olarak dizeye eklerken 'NSStringFromSelector()' kullanmak daha iyi olabilir. –

İlgili konular