有一个更好的方法吗?想要使用循环,但它会中断

时间:2011-07-18 23:30:15

标签: ios xcode ipad

我有以下几块代码,它们将六个Player对象添加到六个Seat UIView对象中。我正在使用存储在NSMuteableDictionary中的数据添加它们。

以下是目前的情况:

MoneyCentralAppDelegate *delegate = (MoneyCentralAppDelegate *) [[UIApplication sharedApplication] delegate];

//add player1
NSMutableDictionary *player1Dictionary = [[delegate appDataDictionary] valueForKey:@"Player1"];
Player *player1 = [[Player alloc] initWithFrame:CGRectMake(0,0,0,0)];
player1.playerName = [player1Dictionary valueForKey@"PlayerName"];
player1.avatar = [UIImage imageNamed:[player1Dictionary valueForKey:@"Avatar"]];
[seat1 setAlpha:1];
[seat1 addSubView:player1];

//add player2
NSMutableDictionary *player2Dictionary = [[delegate appDataDictionary] valueForKey:@"Player2"];
if ([player2Dictionary valueForKey:@"PlayerName"] != @"Enter your name") {
 Player *player2 = [[Player alloc] initWithFrame:CGRectMake(0,0,0,0)];
 player2.playerName = [player2Dictionary valueForKey@"PlayerName"];
 player2.avatar = [UIImage imageNamed:[player2Dictionary valueForKey:@"Avatar"]];
 [seat2 setAlpha:1];
 [seat2 addSubView:player2];
}

//And so on for another 4 more players...

有没有办法通过使用循环来简化此代码?我尝试了以下但是它不起作用:

for (int i=1; i=6, i++) {
 [self addPlayerToBoard:i];
}

- (void) addPlayerToBoard:(int)playerNumber {

MoneyCentralAppDelegate *delegate = (MoneyCentralAppDelegate *) [[UIApplication sharedApplication] delegate];
NSMutableDictionary *playerDictionary;
NSString *thePlayer;
Seat *seat;

switch (playerNumber) {
 case 1:
  thePlayer = @"Player1";
  seat = seat1;
  break;
 case 2:
  thePlayer = @"Player2";
  seat = seat2:
  break;
 case 3:
  //and so on to 6
}

playerDictionary = [[delegate appDataDictionary] valueForKey:thePlayer];
if ([playerDictionary valueForKey:@"PlayerName"] != @"Enter your name") {
 Player *newPlayer = [[Player alloc] initWithFrame:CGRectMake(0,0,0,0)];
 newPlayer.playerName = [playerDictionary valueForKey:@"PlayerName"];
 newPlayer.avatar = [UIImage imageName:[playerDictionary valueForKey:@"Avatar"]];
 [seat setAlpha:1];
 [seat addSubView:newPlayer];
}
}

据我所知,这段代码很好。它编译时没有错误或警告,但是当我尝试启动新游戏时,应用程序在尝试运行该代码时会冻结。

另外,作为一个侧面问题,if语句检查PlayerName的值是否!= @“输入你的名字”显然评估为真,不管是什么因为我每次最终都有6名玩家。这是检查nsmutabledictionary中字符串值的错误方法吗?

我知道这很重要,但我真的很感激这里的任何帮助或建议。

非常感谢。

1 个答案:

答案 0 :(得分:2)

问题在于您创建for循环的方式。正确的语法是:for(initialize; test; update)。要将变量i从1迭代到6,您应该使用:

for(int i = 1; i <= 6; i++) {
    [self addPlayerToBoard:i];
}

在对象上使用!===运算符时,您正在比较对象的指针。这意味着如果两个对象完全相同,则它们将是相同的,而不仅仅是等价物。要确定两个对象是否相同,您应该使用[object1 isEqualTo:object2]。如果你知道一个对象是一个NSString,你应该使用[string1 isEqualToString:string2],因为它会更快。

if (![[playerDictionary valueForKey:@"PlayerName"] isEqualToString:@"Enter your name"]) {
    ...
}
相关问题