2012-08-14 56 views
0

我被困在一个小问题:调用方法与keyValueCoding(setValue方法:forKeyPath :)

Player *player1; 
Player *player2; 
Player *player3; 
Player *player4; 

里面Player类,我有一个名为score变量。如果我需要改变所有球员得分,我用这个函数:

for (int i = 1; i <= 4; i++) 
{ 
    [self setValue:@"10,000" forKeyPath: [NSString stringWithFormat: @"player%i.score.text", i]]; 
} 

另外在Player类,我有一个名为changeScorePosition方法。我想在游戏中为所有“玩家”调用这种方法。我该怎么做呢?

+3

我不明白,你的实际要求是什么,你能解释一下吗? – 2012-08-14 20:08:36

+0

感谢您的回复。我编辑问题,更好地解释。 – BlackMouse 2012-08-14 20:17:24

回答

1

player1是一个全局变量吗?

而是尝试创建一个对象来管理所有玩家。然后这个对象可以轻松地遍历所有玩家并更新他们的分数。

1

你可以把玩家放在一个数组中,然后根据索引使用i调用正确的玩家(尽管它需要从0开始)。

NSArray *players = [NSArray arrayWithObjects: player1, player2, player3, player4, nil]; 


for (int i = 0; i < 4; i++) 
{ 
    Player *currentPlayer = (Player *)[players objectAtIndex:i]; 
    // do whatever with your player here 
} 
1

这是更好地创建这样的球员的数量,

NSMutableArray *playerArray = [[NSMutableArray alloc] init]; 

for (int i = 1; i <= 4; i++) 
{ 
    Player *player = [{Player alloc] init]; 
    [playerArray addObject:player]; 
    [player release]; 
} 

并调用类的方法,

for (int i = 1; i <= 4; i++) 
{ 
    [self setValue:@"10,000" forKeyPath: [NSString stringWithFormat: @"player%i.score.text", i]]; 
    [[playerArray objectAtIndex:i-1] changeScorePosition]; 
} 

请参考以下链接:access objective-c object by string name or variable

0

感谢您的帮助。我改变了一些代码,并发现我可以这样做:

[[self valueForKeyPath:[NSString stringWithFormat:@"player%i", i]] performSelector:@selector(playerDeclined)];