2013-03-08 33 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是什么号码,你想跑步。

相关问题