2013-03-08 76 views
0

我試圖運行一個操作,但是我想確定哪一個。比如我有在變量名稱後面添加一個整數以訪問

[bullet runAction:bullet1]; 

我希望能夠操縱它的訪問 像

[bullet runAction:bullet%d, i]; 
+0

wt是你的問題? – iPatel 2013-03-08 11:34:00

+0

我不認爲這是可能的。也許你可以用標籤來代替。 – aqua 2013-03-08 11:34:06

+0

@aqua:這當然是可以的。 – 2013-03-08 11:51:36

回答

3

使用的動作數組變量,並使用索引來訪問它們

NSArray bulletActions = @[bullet1, bubble2]; 
[bullet runAction:bulletActions[0]]; 

我認爲它會滿足您的需求

+0

你能解釋什麼是bullet1和bubble2,以及如何runAction:調用bulletActions [0]? – 2013-03-08 11:53:11

+0

@Anoop bullet1,bulle2等。我想他們是CCAction,我猜他有很多動作,並且通過索引來運行它們,所以這是我提出的解決方案將它們存儲在一個數組中,runAction和bulletActions [0]將在這種情況下運行bullet1 – Ultrakorne 2013-03-08 12:01:03

+0

我沒有太多想法關於CCActions :( – 2013-03-08 12:05:18

0

你不能做什麼你正在試圖做的問題,而不是傳遞一個子彈對象的數組,並傳遞給你想要訪問該數組元素的值。

1

您需要使用selector

SEL selector=NSSelectorFromString([NSString stringWithFormat:@"bullet%d", i]); 
[self performSelector:selector]; 

從這裏就可以調用一個方法命名爲bullet1buttet2等,如果i提供爲1,2等

-(void)bullet1{ 
    [email protected]"bullet 1 called"; 
} 


-(void)bullet2{ 
    [email protected]"bullet 2 called"; 
} 

-(void)bullet<your integer value>{ 
    [email protected]"bullet <your integer value> called"; 
} 
+0

這是正確的,但他不應該使用這種設計來做他在做的事情,使用運行時功能對此不是一個不錯的選擇,但+1無論如何 – Ultrakorne 2013-03-08 11:52:03

+0

@Ultrakorne:你能解釋爲什麼我們不應該使用動態方法調用?我知道Obj-C的活力使它比許多其他語言更好。 – 2013-03-08 11:55:15

+0

,因爲他只是想要一個索引訪問變量的集合,這就是這麼簡單,我不覺得需要過度複雜。 – Ultrakorne 2013-03-08 12:01:56

1

編輯:對不起,後看着我的回答,我看到了一些缺陷,並將其寫爲更好的方法來實現這一目標。

這樣做的最佳結果是創建一個包含所有操作的數組。即

NSArray actionArray = [[NSArray alloc] initWithItems:bullet1, bullet1, bullet3, nil]; 

然後你就可以運行創建一個方法來運行的操作:

- (void)bulletAction:(int)numberToRun { 

    [bullet runAction:[actionArray objectAtIndex:numberToRun]]; 

} 

這可以通過使用代碼調用:

[self bulletAction:0]; 

其中0是什麼號碼,你想跑步。

相關問題